0

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

我试图修改事件处理程序。我发现物体放大和缩小的速度是我放入的旋转速度glRotatef()。物体像钟摆一样进出屏幕,其速度与 a 成正比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

这是我的显示函数,在 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()

我不知道这些代码是否足以识别和解决问题。如果有人需要程序的任何其他部分,请告诉我,我会添加。当光标移回窗口中心时,有人可以帮助我使对象停止旋转并且不放大和缩小吗?

4

1 回答 1

0

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

display(),而不是glRotatef(input_manager.yawSpinAngle, 0, input_manager.yaw, 0),替换input_manager.yawTrue。物体是否旋转现在只是由 决定input_manager.yaw_rotate_speed

我只是不明白为什么因为input_manager.yaw它也是一个布尔变量,这意味着放在那里应该没有任何区别True

于 2019-06-02T17:03:56.960 回答