opengl(python)相机旋转与立方体旋转gluLookAt()在显示代码中的位置

tez616oj  于 2022-11-23  发布在  Python
关注(0)|答案(1)|浏览(170)

此代码是显示部分。

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()之后时,相机会旋转。但我不知道为什么。为什么会发生这种情况?

nimxete2

nimxete21#

OpenGL是一个状态引擎。当前变换矩阵是一个全局状态。函数gluLookAtglRotatef都定义了一个矩阵,并将当前变换矩阵与新定义的矩阵相乘。矩阵乘法不是commutative,顺序很重要:

matrix1 * matrix2 != matrix2 * matrix1

因此:

gluLookAt(5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)
glRotatef(self.pitch, 1.0, 0.0, 0.0)

不等同于

glRotatef(self.pitch, 1.0, 0.0, 0.0)
gluLookAt(5.0, 5.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0)

你得关心秩序。

相关问题