此代码是显示部分。
def display(self):
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
glLoadIdentity()
gluLookAt(5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
if (self.axis == 0):
glRotatef(self.pitch, 1.0, 0.0, 0.0)
elif (self.axis == 1):
glRotatef(self.yaw, 0.0, 1.0, 0.0)
elif (self.axis == 2):
glRotatef(self.roll, 0.0, 0.0, 1.0)
self.colorcube()
glFlush()
glutSwapBuffers()
)发现当我把代码gluLookAt()
放在glRotate()
之前时,立方体会旋转,当我把代码gluLookAt()
放在glRotate()
之后时,相机会旋转。但我不知道为什么。为什么会发生这种情况?
1条答案
按热度按时间nimxete21#
OpenGL是一个状态引擎。当前变换矩阵是一个全局状态。函数
gluLookAt
和glRotatef
都定义了一个矩阵,并将当前变换矩阵与新定义的矩阵相乘。矩阵乘法不是commutative,顺序很重要:因此:
不等同于
你得关心秩序。