2013-11-15 2 views
0

Я пытаюсь реализовать камеру, которая перемещается при нажатии и перетаскивании. Он использует 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() 

ответ

0

Я использовал glutPassiveMotionFunc(self.mouse_movement), когда я использую только gluteMotionFunc(self.mouse_movement)

Смежные вопросы