如何使用glTranslatef缩小对象
How to zoom out on an object with glTranslatef?
我正试图用glTranslatef缩小多边形。然而,无论我在glTranslatef函数的Z(试图缩小)中输入什么数字,它仍然是一个黑色窗口。这是代码:
glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT);
glPushMatrix ();
glTranslatef(0, 0, 0.9f); //Here I'm translating
glBegin (GL_POLYGON);
glColor3f(100, 100, 0); glVertex2f(-1.0f, -1.0f);
glColor3f(100, 0, 100); glVertex2f(-1.0f, 1.0f);
glColor3f(25, 25, 25); glVertex2f(1.0f, 1.0f);
glColor3f(100, 50, 90); glVertex2f(1.0f, -1.0f);
glEnd ();
glPopMatrix ();
SwapBuffers (hDC);
Sleep (1);
我在Z中尝试了以下数字:0.9(工程)-0.9(工程)1.1(不适用)-1.1(不起作用)
我需要其他代码吗?还是我做错了?
如果您没有指定投影矩阵,那么标准矩阵将是正交(非透视)投影,left-right
、top-bottom
和near-far
都是-1,1
。
因此,向外平移会使顶点根本无法绘制。
这样做的原因是没有设置转换矩阵。
现在,您正在一个称为"规格化设备坐标"的坐标空间中绘制,该坐标空间的查看体积在所有方向上都包含范围[-1.0,1.0]。存在于该范围之外的任何点都将被剪裁。
用glVertex2f (...)
指定的顶点隐式放置在z=0.0
处,并且沿Z轴平移超过1.0单位会将顶点推到观察体积之外。这就是为什么-1.1和1.1失败,而0.9与-0.9工作正常。
即使在没有透视投影的情况下平移到观察体积内的某个位置,沿Z轴平移也不会改变其大小。唯一会发生的事情是,最终对象将被平移到足够远的位置,从而被剪切并突然消失(您已经体验过值>1.0或<-1.0)。
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 如何缩小对象的大小
- 如何使用glTranslatef缩小对象
- 尝试初始化 wregex 对象时 boost 的 regex_traits_defaults.hpp 中的缩小转换警告