2012-06-19 9 views
5

Ich mache eine GUI in OpenGL (genauer gesagt lwjgl). Ich habe mich bemüht, verschiedene Wege zu erforschen, aber es fällt mir schwer, genau das zu finden, was ich möchte. Ich möchte keine externen Bibliotheken verwenden (nur solche, die in OpenGL erstellt wurden und sogar versuchen, GLUT nicht zu verwenden), und ich möchte, dass alles funktioniert, was OpenGL unterstützt (zB Frame Buffer Objects funktioniert nicht mit älteren) Grafikkarten).OpenGL zeichnen Teilobjekt in scrollbaren Panel

Ich mache eine 3D-GUI mit einem scrollbaren Panel als Komponente. Das Problem ist, ich weiß nicht, wie man eine partielle GUI-Komponente zeichnet, ohne viele Berechnungen durchzuführen, um nur einen Teil davon zu rendern. Ich mache die Komponenten aus OpenGL-Primitiven, keine Texturen. Ich hatte gehofft, es gibt eine einfache Möglichkeit, dies zu tun, wie mehrere Ansichtsfenster verwenden. Ich verstehe nicht wirklich, was Viewports sind.

Kurz gesagt: Ich brauche ein scrollbares Panel als Komponente, die andere GUI-Komponenten überlappt (da es sich um ein Dropdown-Menü handelt) und lasse keine der Komponenten in meinem Panel außerhalb meines Panels zeichnen.

Antwort

6

Wenn Sie nur Pixel außerhalb einer rechteckigen Region (und ich denke, das ist, was Sie fragen) zu verhindern, als glScissor ist genau das, was Sie suchen.

In lwjgl finden Sie die Funktion in org.lwjgl.opengl.GL11.

+1

Sie können auch GL_GLIP_PLANES nutzen, damit Sie den Modellbereich einclipsen können (falls Ihre GUI-Koordinaten nicht mit Ansichtsfenster-Pixeln übereinstimmen). – Kromster

+0

Danke, genau das habe ich gesucht – axelrod360

1

Wenn Sie eine größere Szene innerhalb einer festen Region auf dem Bildschirm scrollen möchten, besteht die einfachste Möglichkeit darin, Ihre Projektionsmatrix für die Bildlaufposition zu ändern und die Szene neu zu zeichnen. Wenn Sie Ihre Projektionsmatrix mit gluPerspective einrichten, müssen Sie sie in einen direkten Aufruf von glFrustum umwandeln; Wenn Sie GlOrtho verwenden, ist es viel einfacher.

Denken Sie daran, dass das "Scrollen" einer perspektivischen Ansicht keinen richtigen Weg hat - es hängt davon ab, welche Art von Effekt Sie erzielen möchten und welche Art von Verzerrung an den Rändern des gesamten Ansichtsfensters gewünscht wird .