如何使用 glTranslatef 缩小对象?
How to zoom out on an object with glTranslatef?
我正在尝试使用 glTranslatef 缩小多边形。但是,无论我在 glTranslatef 函数中输入 Z(试图缩小)的数字是什么,它仍然是黑色 window。这是代码:
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
.
所以在外面平移会使顶点根本不绘制。
这什么都不做的原因是你没有设置转换矩阵。
现在您正在坐标 space 中绘制,称为标准化设备坐标,其视体积涵盖范围 [-1.0、1.0]各个方向。超出该范围的任何点都会被剪掉。
用 glVertex2f (...)
指定的顶点隐式放置在 z=0.0
并且沿 Z 轴平移超过 1.0 个单位会将您的顶点推到视图之外体积。这就是为什么 -1.1 和 1.1 失败,而 0.9 和 -0.9 工作正常。
即使在没有透视投影的情况下平移到视体积内的某个位置,沿 Z 轴平移也不会改变其大小。唯一会发生的事情是最终对象将被翻译得足够远以至于它被剪裁并突然消失(您已经使用值 > 1.0 或 < - 1.0).
我正在尝试使用 glTranslatef 缩小多边形。但是,无论我在 glTranslatef 函数中输入 Z(试图缩小)的数字是什么,它仍然是黑色 window。这是代码:
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
.
所以在外面平移会使顶点根本不绘制。
这什么都不做的原因是你没有设置转换矩阵。
现在您正在坐标 space 中绘制,称为标准化设备坐标,其视体积涵盖范围 [-1.0、1.0]各个方向。超出该范围的任何点都会被剪掉。
用 glVertex2f (...)
指定的顶点隐式放置在 z=0.0
并且沿 Z 轴平移超过 1.0 个单位会将您的顶点推到视图之外体积。这就是为什么 -1.1 和 1.1 失败,而 0.9 和 -0.9 工作正常。
即使在没有透视投影的情况下平移到视体积内的某个位置,沿 Z 轴平移也不会改变其大小。唯一会发生的事情是最终对象将被翻译得足够远以至于它被剪裁并突然消失(您已经使用值 > 1.0 或 < - 1.0).