为什么 glTranslatef() 会调整对象的大小?
Why does glTranslatef() resize object?
我有 3 个矩形,我需要将它们放置在讲台的形状中。此时他们看起来像这样:
显示函数代码:
glPushMatrix();
glRotated(rotate_x, 1.0, 0.0, 0.0);
glRotated(rotate_y, 0.0, 1.0, 0.0);
glScalef(1, 3, 1);
glColor3fv(gold);
glutSolidCube(2);
glPopMatrix();
glPushMatrix();
glTranslated(2, 0, -3);
glRotated(rotate_x, 1.0, 0.0, 0.0);
glRotated(rotate_y, 0.0, 1.0, 0.0);
glScalef(1, 2, 1);
glColor3fv(silver);
glutSolidCube(2);
glPopMatrix();
glPushMatrix();
glTranslatef(-2, 0, 0);
glScalef(1, 1, 1);
glRotated(rotate_x, 1.0, 0.0, 0.0);
glRotated(rotate_y, 0.0, 1.0, 0.0);
glColor3fv(bronze);
glutSolidCube(2);
glPopMatrix();
当我尝试使用 glTranslatef(-2, 0, -2) 将银色矩形向下移动一点点以使其与黄色矩形处于同一水平时;它只是变小了:
glTranslatef 的前两个参数 left/right 和 closer/further 可以很好地移动对象,那么为什么第三个参数会改变对象的大小?
你把它移远了。距离较远的物体显得较小;这就是透视的工作原理。由于您没有照明、背景对象或任何其他深度提示,因此距离更远与将其缩放到更小的尺寸明显相同。
我有 3 个矩形,我需要将它们放置在讲台的形状中。此时他们看起来像这样:
glPushMatrix();
glRotated(rotate_x, 1.0, 0.0, 0.0);
glRotated(rotate_y, 0.0, 1.0, 0.0);
glScalef(1, 3, 1);
glColor3fv(gold);
glutSolidCube(2);
glPopMatrix();
glPushMatrix();
glTranslated(2, 0, -3);
glRotated(rotate_x, 1.0, 0.0, 0.0);
glRotated(rotate_y, 0.0, 1.0, 0.0);
glScalef(1, 2, 1);
glColor3fv(silver);
glutSolidCube(2);
glPopMatrix();
glPushMatrix();
glTranslatef(-2, 0, 0);
glScalef(1, 1, 1);
glRotated(rotate_x, 1.0, 0.0, 0.0);
glRotated(rotate_y, 0.0, 1.0, 0.0);
glColor3fv(bronze);
glutSolidCube(2);
glPopMatrix();
当我尝试使用 glTranslatef(-2, 0, -2) 将银色矩形向下移动一点点以使其与黄色矩形处于同一水平时;它只是变小了:
glTranslatef 的前两个参数 left/right 和 closer/further 可以很好地移动对象,那么为什么第三个参数会改变对象的大小?
你把它移远了。距离较远的物体显得较小;这就是透视的工作原理。由于您没有照明、背景对象或任何其他深度提示,因此距离更远与将其缩放到更小的尺寸明显相同。