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