OpenGL:对象奇怪地旋转

OpenGL: Objects rotating strangely

我有一个不断旋转的立方体对象,但我 运行 遇到了问题。如果我将对象从 (0,0,0) 移开,对象将开始以 st运行ge 的方式旋转。我不知道为什么以及如何解决这个问题。

这是我的对象的样子:

这就是我旋转立方体的方式:

    def draw_edges(self, color):
        """Draws the cube's edges"""
        glPushMatrix()
        glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])
        glBegin(GL_LINES)
        for edge in self.edges:
            for vertex in edge:
                glColor3fv(color)
                glVertex3fv(self.vertices[vertex])
        glEnd()
        glPopMatrix()

然后我在立方体上调用旋转方法,将传入的值添加到位置:

    def rotate(self, rotval, mult):
        self.rotation[0] = rotval[0]
        self.rotation[1] = rotval[1]
        self.rotation[2] = rotval[2]
        self.rotation[3] += mult
        if self.rotation[3] >= 360:
            self.rotation[3] = self.rotation[3] - 360

谁能帮忙解决这个问题。

Fixed Function Pipeline matrix operations like glTranslate and glRotate指定一个新矩阵并将当前矩阵乘以新矩阵。
矩阵乘法不是commutative。因此,无论您是先调用 glTranslate 然后调用 glRotate 还是调用 glRotate 然后调用 glTranslate.

,都是有区别的

glRotate后面跟着glTranslate时,翻译后的对象绕原点旋转:

glTranslate后跟[=​​12=]时,则对象旋转,旋转后的对象平移:

如果平移网格,通过给顶点添加偏移量,这对应后面的。但是如果你想围绕网格的原点旋转网格,那么你必须平移旋转的模型(translate * rotate)。

使用glTranslate“移动”网格:

def draw_edges(self, color):
        
    """Draws the cube's edges"""
    glPushMatrix()

    glTranslate(self.x, self.y, self.z)
    glRotate(self.rotation[3],self.rotation[0],self.rotation[1],self.rotation[2])    

    glBegin(GL_LINES)
    for edge in self.edges:
        for vertex in edge:
            glColor3fv(color)
            glVertex3fv(self.vertices[vertex])
    glEnd()
    glPopMatrix()