glRotate () продолжает увеличивать и уменьшать мой вид, и я ничего не делаю - PullRequest
0 голосов
/ 02 июня 2019

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

Я пытался изменить обработчик событий. Я обнаружил, что скорость, с которой объект увеличивается и уменьшается, это скорость вращения, которую я положил в glRotatef(). Объект движется внутрь и наружу экрана, как маятник, скорость которого пропорциональна sin(). Я только что узнал, что скорость объекта пропорциональна sin() скорости вращения, которую я положил в glRotatef().

это мой обработчик событий мыши

    def mouse_passive_motion(self, *args):
        print(args)

        # rotate left
        if args[0] < self.OFFSET_TO_CHANGE_ANGLE:
            self.yaw = True
            self.yaw_rotate_speed = self.ROTATION_SPEED
        else:
            self.yaw = False
            self.pitch_rotate_speed = 0

        # rotate right
        if args[0] > self.WINDOW_DIMENSIONS[0]-self.OFFSET_TO_CHANGE_ANGLE:
            self.yaw = True
            self.yaw_rotate_speed = -self.ROTATION_SPEED
        else:
            self.yaw = False
            self.pitch_rotate_speed = 0

это моя функция отображения, которая вызывается в главном цикле перенасыщения.

def display():
    global input_manager

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()
    glTranslatef(0.0, -WINDOW_DIMENSIONS[1]/2, -3500)


    input_manager.update_room_position()
    glTranslatef(input_manager.xTranslate, input_manager.yTranslate, input_manager.zTranslate)
    glRotatef(input_manager.yawSpinAngle, 0, input_manager.yaw, 0)
    draw_a_room()

    glFlush()

    glutSwapBuffers()

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

1 Ответ

0 голосов
/ 02 июня 2019

Я не знаю, как это имеет какое-то значение, но это просто решило проблему.

В display() вместо glRotatef(input_manager.yawSpinAngle, 0, input_manager.yaw, 0) замените input_manager.yaw на True.Вращается ли объект сейчас или нет, просто определяется input_manager.yaw_rotate_speed.

. Я просто не понимаю, почему, поскольку input_manager.yaw также является булевой переменной, это означает, что она не должна иметь никакого значения дляположи True туда.

...