2016-07-21 26 views
0

ich OpenGL durch Pygame mit Sachen zu machen, und ich will OpenGL Maus Informationen erhalten. Ich weiß, dass ich Mausposition & klicken kann, klicken Sie direkt über Pygame, aber ich brauche Mausposition in OpenGL-Koordinaten, nicht nur Pixelkoordinaten des Ansichtsfensters. Das Problem ist, dass ich die Openback-Mausrückrufe nicht auslösen kann. Betrachten Sie den folgenden Code ein:Problem mit OpenGL Maus Rückrufe in Pygame

import pygame 
from pygame.locals import DOUBLEBUF, OPENGL 
from OpenGL.GLUT import glutMouseFunc, glutInit 

def mouse_handler(button, state, x, y): 
    print("mouse handler: ",button, state, x, y) 

pygame.init() 
display = (800,600) 
pygame.display.set_mode(display, DOUBLEBUF|OPENGL) 
glutInit() 
glutMouseFunc(mouse_handler) 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      quit() 

    pygame_mouse_pos = pygame.mouse.get_pos() 
    print(pygame_mouse_pos) 

Wenn Sie diesen Code ausführen wird es einen kontinuierlichen Ausdruck der Mausposition nach Pygame, beginnen, die von der Linie pygame_mouse_pos = pygame.mouse.get_pos() erhalten wird. Aber ich kann den OpenGL-Maus-Callback, der mit glutMouseFunc(mouse_handler) eingerichtet wurde, nicht auslösen. Kann mir jemand sagen, was ich falsch mache? Dieser Code läuft sowohl in Python 2 als auch in 3 und ich bekomme in jedem die gleichen Ergebnisse.

Antwort

0

Sie können pygame coordinates/viewport verwenden, um Koordinaten im [0; 1] -Intervall (z. B. für Texturkoordinaten) oder pygame coordinates/viewport * 2 - 1 für [-1; 1] -Intervall (NDC-Koordinaten) zu erhalten.

denke ich Schwemme für diese Verwendung wird nicht funktionieren, weil Sie Ihre Fenster mit pygame und Schwemme schaffen weiß nichts über das Fenster. Ich könnte mich irren, ich kenne weder Überschwang noch Pygames.

Und nur ein Tipp für googeln, OpenGL sich die Maus nicht wissen Koordinaten überhaupt, wird dies durch Schwemme vorgesehen ist.

+0

Was ist der Unterschied zwischen OpenGL und GLUT? Ich habe einfach angenommen, dass GLUT eine Komponente von OpenGL ist. –

+1

@ J-bob, GLUT ist das "OpenGL Utility-Toolkit", das Eingaben verarbeitet, Fenster erstellt und den OpenGL-Kontext erstellt. Es geht also eher darum, mit dem Betriebssystem zu sprechen. Es hat auch einige übergeordnete Zeichenmethoden. OpenGL ist eine API, um mit der GPU oder besser mit ihrem Treiber zu kommunizieren, also geht es darum, Dreiecke zu verschieben, Shader zu erstellen usw. – karyon