如何使用glTranslatef缩小对象

How to zoom out on an object with glTranslatef?

本文关键字:对象 缩小 glTranslatef 何使用      更新时间:2023-10-16

我正试图用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-righttop-bottomnear-far都是-1,1

因此,向外平移会使顶点根本无法绘制。

这样做的原因是没有设置转换矩阵。

现在,您正在一个称为"规格化设备坐标"的坐标空间中绘制,该坐标空间的查看体积在所有方向上都包含范围[-1.01.0]。存在于该范围之外的任何点都将被剪裁。

glVertex2f (...)指定的顶点隐式放置在z=0.0处,并且沿Z轴平移超过1.0单位会将顶点推到观察体积之外。这就是为什么-1.11.1失败,而0.9-0.9工作正常。

即使在没有透视投影的情况下平移到观察体积内的某个位置,沿Z轴平移也不会改变其大小。唯一会发生的事情是,最终对象将被平移到足够远的位置,从而被剪切并突然消失(您已经体验过值>1.0<-1.0)。