如何使用glTranslatef缩小对象?

时间:2015-03-06 12:47:25

标签: c++ opengl

我试图用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(不起作用)

我是否需要其他代码或我做错了?

2 个答案:

答案 0 :(得分:1)

如果您尚未指定投影矩阵,那么标准投影矩阵将是一个正交(非透视)投影,left-right top-bottomnear-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 )。