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