вращающиеся ободья автомобильных трансформаций opengl - PullRequest
1 голос
/ 17 октября 2010

Вот функция рисования, которая рисует части автомобиля, в этой функции проверяются ободья автомобиля и флаг, и мне нужно вращать обод шины, когда я двигаю машину.Что-то не работает, поскольку обода вращаются, но вынимаются из модели автомобиля, когда я нажимаю клавишу со стрелкой вверх, но машина все равно движется.

Я также инициализировал 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 ]

2 голосов
/ 20 октября 2010

Я бы настоятельно рекомендовал опубликовать это на форуме класса. Я не думаю, что TJ действительно хотел бы увидеть это, и его очень легко найти.

1 голос
/ 18 октября 2010

Чтобы повернуть деталь вокруг ее собственного центра, вам нужно перевести ее в начало координат, повернуть и перевести обратно.

Итак, ваш

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

должен предшествовать перевод с последующим переводом.

См. принятый ответ на этот вопрос .

1 голос
/ 17 октября 2010

Вы почти наверняка применяете вращение и преобразование в неправильном порядке, так что обод вращается вокруг некоторой точки, отличной от центра шины.

Вы можете попробовать выполнить вращение в режиме MODELVIEW.матрица и перевод в матрице ПРОЕКЦИЯ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...