Frage OpenGL zeichnet partielles Objekt in scrollbarem Panel


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).

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.


5
2018-06-19 04:41


Ursprung


Antworten:


Wenn Sie nur verhindern möchten, dass Sie Pixel außerhalb einer rechteckigen Region zeichnen (und ich denke, das ist es, was Sie fragen), dann glScissor ist genau das, was Sie suchen.

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


6
2018-06-19 05:00



Wenn Sie eine größere Szene innerhalb eines festen Bereichs auf dem Bildschirm scrollen möchten, können Sie die Projektionsmatrix einfach für die Bildlaufposition ändern und die Szene neu 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, etwas zu tun - es hängt davon ab, welche Art von Effekt Sie erzielen möchten und welche Art von Verzerrung Sie an den Rändern des gesamten Ansichtsfensters wünschen.


1
2018-06-19 05:16