当我运行此代码时,我得到了2个缩放的球体,第一个球体的变换也影响了第二个球体。
glTranslatef(0,1,0);
glScalef(1,1,0.5);
glutWireSphere(0.5, 20, 16);
glTranslatef(0,-1,0);
glutWireSphere(0.5, 20, 16);
我有3个问题:
glTranslate
和glScale
被认为是一个或两个矩阵? glPushMatrix
保存缩放转换,以便glTranslatef(0,1,0)
不会影响第二个球体? 答案 0 :(得分:4)
首先,您应该知道您正在使用已弃用的功能。您应该查看如何使用着色器执行上述操作。
那就是说,回答你的问题:
glLoadMatrix()
除外)。因此,缩放,翻译,乘法等都会改变当前矩阵。使用glBegin()
和glEnd()
绘制某些几何图形时,它们会使用当前的变换矩阵。 (大部分OpenGL以这种方式工作。有一堆状态,无论当前状态如何,这都是用来绘制内容的东西。)glPushMatrix()
/ glPopMatrix()
:
glPushMatrix();
glTranslatef(0,1,0);
glScalef(1,1,0.5);
glutWireSphere(0.5, 20, 16);
glPopMatrix();
glutWireSphere(0.5, 20, 16);
但是你想要两者都缩放,但只有1被翻译吗?如果你澄清一下,我可以解决上述问题,做你想做的事。
基本上,glPushMatrix()
会保存矩阵的当前状态。然后,您可以对其进行任何更改,并使用这些更改绘制任何几何体。然后,当您致电glPopMatrix()
时,它会将其恢复为您拨打glPushMatrix()
时所处的状态。