Я пытаюсь реализовать камеру, которая перемещается при нажатии и перетаскивании. Он использует glutMouseFunc для регистрации кликов мыши, которые просто:Python Opengl Замораживание при щелчке мыши
def on_click(self, button, state, x, y):
if button == GLUT_LEFT_BUTTON:
if state == GLUT_DOWN:
self.dragging = True
self.drag_x_origin = x
self.drag_y_origin = y
else:
self.dragging = False
И glutPassiveMotionFunc имеет:
def mouse_movement(self, x, y):
print "----------------------"
if self.dragging:
print "+++++++++++"
, который должен в этот момент печати «++++++++++++ «но почему-то. Он блокируется. Когда я запускаю программу, я получаю бесконечную серию «----------------------», пока я не щелкнул, а затем просто остановится. У меня есть печать в функции отображения, которая все еще работает, но по какой-то причине эта функция блокируется. Может ли кто-нибудь понять, почему?
В основном полный код:
class Camera():
def __init__(self):
self.camera_angle_horizontal = 1.0
self.camera_angle_vertical = 1.0
self.drag_x_origin = 0.0
self.drag_y_origin = 0.0
self.dragging = False
glutInit(sys.argv)
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutInitWindowSize(500, 500)
glutInitWindowPosition(100, 100)
glutCreateWindow('cube')
self.init()
glutMouseFunc(self.on_click)
glutPassiveMotionFunc(self.mouse_movement)
glutDisplayFunc(self.display)
glutReshapeFunc(self.reshape)
glutKeyboardFunc(self.keyboard)
glutMainLoop()
def init(self):
glClearColor(0.0, 0.0, 0.0, 0.0)
glShadeModel(GL_FLAT)
def display(self):
print self.dragging, self.camera_angle_vertical, self.camera_angle_horizontal
...
glutPostRedisplay()
def reshape(self, w, h):
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
gluPerspective(40.0, w/h, 1.0, 20.0)
#glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0)
glMatrixMode(GL_MODELVIEW)
def on_click(self, button, state, x, y):
if button == GLUT_LEFT_BUTTON:
if state == GLUT_DOWN:
self.dragging = True
else:
self.dragging = False
def mouse_movement(self, x, y):
print "----------------------"
if self.dragging:
print "+++++++++++"
c = Camera()