旋转汽车改装轮胎轮辋

时间:2010-10-16 21:15:24

标签: python opengl

这是绘制汽车零件的绘图功能,在此功能中检查汽车轮辋并检查旗帜,我需要在移动汽车时旋转轮辋。由于轮圈旋转但是从汽车模型中取出,当我按下箭头键但是汽车确实移动时,有些东西不起作用。

我还在初始化函数中初始化了self.fFlag =“false”:

def on_draw(self):
    # Clears the screen and draws the car
    # If needed, extra transformations may be set-up here
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)


    for name in self.parts:
        colors = self.colors
        color = colors.get(name, colors["default"])
        glColor3f(*color)

        if (name == 'Front Driver tire rim') & (self.fFlag == "true"):
            bodyFace = self.mini.group(name)
            glPushMatrix()
            glRotatef(45,1,0,0)

            # Drawing the rim
            for face in bodyFace:
                if len(face) == 3:
                    glBegin(GL_TRIANGLES) 
                elif len(face) == 4:
                    glBegin(GL_QUADS) 
                else: 
                    glBegin(GL_POLYGON)
                for i in face:
                    glNormal3f(*self.mini.normal(i))
                    glVertex3f(*self.mini.vertex(i))
                glEnd()



            glPopMatrix()
            self.fFlag == "false"

        else:
            bodyFace = self.mini.group(name)
            for face in bodyFace:
                if len(face) == 3:
                    glBegin(GL_TRIANGLES) 
                elif len(face) == 4:
                    glBegin(GL_QUADS) 
                else: 
                    glBegin(GL_POLYGON)
                for i in face:
                    glNormal3f(*self.mini.normal(i))
                    glVertex3f(*self.mini.vertex(i))
                glEnd()



def on_key_release(self, symbol, modifiers):
    """Process a key pressed event.
    """

    if symbol == key.UP:
        # Move car forward
        # TODO

        glTranslatef(0,-1,0)
        self.fFlag = "true"
        self.on_draw()

        pass

编辑:当我按向上箭头键时,我试图让汽车轮辋旋转,这会使汽车向前移动。

3 个答案:

答案 0 :(得分:2)

我强烈建议将其发布到课堂论坛。我不认为TJ真的很想看到它,而且它很容易找到。

答案 1 :(得分:1)

你几乎肯定会以错误的顺序应用旋转和变换,这样轮圈就可以旋转到轮胎中心以外的某个点。

您可以尝试在MODELVIEW矩阵和PROJECTION矩阵中进行平移。

答案 2 :(得分:1)

为了围绕自己的中心旋转零件,您需要将其转换为原点,旋转它并将其转换回来。

所以你的

        glRotatef(45,1,0,0) # rotate 45 deg about x axis (thru the world origin)

需要在翻译之前和之后。

请参阅accepted answer to this question