2009-04-01 26 views
1

Ich möchte versuchen, einige HCI für meine vorhandene OpenGL-Anwendung zu implementieren. Wenn möglich, sollten die Menüs vor meinen 3D-Grafiken erscheinen, die sich im Hintergrund befinden.Was ist eine gute Möglichkeit, HCI in OpenGL zu implementieren?

Ich dachte daran, ein Quadrat direkt vor der "Kamera" zu zeichnen und dann entweder Texturen oder mehr Primitiven auf das "Basis" - Quadrat zu zeichnen.

Während die Menüs aktiv sind, kann sich die Kamera nicht bewegen, so dass die Kamera nicht von den Menüs weg sieht.

Klingt dieser Sound weit zu irgendjemanden oder bin ich auf den richtigen Spuren? Wie würden es alle anderen tun?

Antwort

1

Ich würde nur glPushMatrix, glLoadIdentity, tun Sie Ihre Zeichnung, dann glPopMatrix und nicht kümmern, wo Ihre Kamera ist.

Sie müssen auch deaktivieren und wieder aktivieren Tiefentest, Beleuchtung und so

1

Es ist die GLUI Bibliothek diese (keine persönliche Erfahrung)
zu tun Oder wenn Sie Qt verwenden es Möglichkeiten gibt, das Rendern von Qt-Widgets über das OpenGL-Modell transparent ist, gibt es auch Beta-Unterstützung für das Rendern von Qt in opengl.

1

Sie könnten auch alle Ihre 3D Rendering, dann zur orthographischen Projektion und zeichnen Sie alle Ihre Menüobjekte. Dies wäre viel einfacher, als alles auf einen großen billboarded Quad zu setzen, wie Sie vorgeschlagen haben.

Auschecken this exerpt, speziell die Überschrift "Projektion Transformationen".

1

Wie bereits erwähnt here, benötigen Sie eine Übersetzung von 0,375 in x und y anzuwenden Pixel perfekte Ausrichtung zu erhalten:

glViewport(0, 0, width, height); 
glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
gluOrtho2D(0, width, 0, height); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glTranslatef(0.375, 0.375, 0.0); 
/* render all primitives at integer positions */ 

Der Algorithmus ist einfach:

  1. 3D-Szene zeichnen, vermutlich mit aktiviertem Tiefen-Test.
  2. Deaktivieren Sie die Tiefe testen, so dass Ihre GUI-Elemente über die 3D-Sachen zeichnen werden.
  3. Verwenden glPushMatrix Sie Ansicht aktuelle Modell zu speichern und Projektionsmatrizen (vorausgesetzt, Sie sie wiederherstellen möchten - sonst nur Trumpf auf ihnen)
  4. Ihre Modellansicht und Projektionsmatrizen auf, wie in dem oben beschriebenen Code
  5. Draw in der Tat, wie sich die Kamera bewegt, werden die 3D-Teile werden davon betroffen sein als - UI-Sachen
  6. Verwenden glPushMatrix Ihre geschoben Matrizen (vorausgesetzt, Sie schob sie)

es so tun macht die Kameraposition irrelevant wiederherstellen normal, aber die 2D-Überlagerung bleibt an Ort und Stelle. Ich erwarte, dass dies das gewünschte Verhalten ist.

Verwandte Themen