glRotate()不断放大和缩小我的视图,而无需我做任何事情

时间:2019-06-01 22:42:19

标签: python-3.x events glut pyopengl glrotate

我正在为此项目使用pyopengl和glut。我只是添加了一个鼠标事件处理程序以旋转对象。它的作用是当光标到达窗口边缘时旋转。但是,当我将光标移回窗口中心时,对象开始交替交替保持放大和缩小。我检查了一下,确定没有该功能。

我试图修改事件处理程序。我发现,对象放大和缩小的速度就是我放入glRotatef()的旋转速度。对象像钟摆一样在屏幕中移入移出,其速度与sin()成正比。我刚刚发现对象的速度与我放入glRotatef()的旋转速度的sin()成正比。

这是我的鼠标事件处理程序

    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

这是我的显示函数,在glut主循环中调用。

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 :(得分:0)

我不知道这有什么区别,但这只是解决了问题。

display()中,用glRotatef(input_manager.yawSpinAngle, 0, input_manager.yaw, 0)代替input_manager.yaw。现在,对象是否在旋转取决于True

我只是不明白为什么,因为input_manager.yaw_rotate_speed也是一个布尔变量,这意味着仅将input_manager.yaw放在这里就不会有任何区别。