我试图用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(不起作用)
我是否需要其他代码或我做错了?
答案 0 :(得分:1)
如果您尚未指定投影矩阵,那么标准投影矩阵将是一个正交(非透视)投影,left-right
top-bottom
和near-far
全部为-1,1
因此,在外面进行翻译会使顶点完全不被绘制。
答案 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 强>)。