2016-08-04 66 views
0

Die alte OpenGL-Programmierung für feste Pipelines verwendete das Matrix-Stack-Prinzip.Modern OpenGL: Soll ich einen benutzerdefinierten Matrixstack verwenden?

Mit flexiblen Shadern kann ich jetzt meine eigenen Matrizen erstellen und verwenden, wie ich will. Ich habe Tutorials gelesen, die anscheinend keinen Matrix-Stack mehr verwenden, sondern einfach nur die benötigten Matrizen speichern und anwenden.

Andere, wie this one, scheinen eine Matrixstapelbibliothek für alle ihre Matrizen zu verwenden (siehe Beispielcode im verknüpften Kapitel).

Meine Frage ist: Ist das eine rein willkürliche Vorliebe, oder wird die moderne Grafikprogrammierung irgendwie oder anders bevorzugt?

+0

Die Verwendung von Stapeln wird nicht bevorzugt. Im Core-Profil gibt es keine Stacks im Voraus und ich empfehle dringend, das Core-Profil für neue Projekte zu verwenden. Speichern Sie die Modellmatrix mit Ihrem Objekt und übergeben Sie sie zusammen mit Ansichts- und Projektionsmatrizen als Shader. Die Stacks waren dort, so dass hierarchische Aufrufe einfacher durchzuführen waren. – Mars

+0

@Mars Ich benutze das Core-Profil, also werde ich definitiv nicht die OpenGL-Stacks verwenden. Aber einige Tutorials verwenden ihre eigenen Stacks oder std :: stack oder etwas ähnliches, während andere anscheinend keine Stacks verwenden, sondern einfach die Matrizen in geeigneten Klassen/Objekten speichern. Würden Sie empfehlen, keine Stapel für "normale" Zeichnungen zu verwenden und Ihre eigene Stapelimplementierung oder Bibliothek zu verwenden, wenn Sie eine Hierarchie benötigen (z. B. Gelenke usw.)? – jhyot

+1

TL; DR: ja. Aber es hängt meistens davon ab, welchen Ansatz Sie "natürlicher" finden und mit dem Sie sich wohler fühlen. Man könnte so von alter Pipeline beeinflusst sein, kann nicht damit fertig werden, keinen Stapel von Matrizen zu haben und muss daher sein eigenes implementieren. Eine andere Person konnte nichts Wertvolles im Stapel sehen. Ich bin fast der Letzte. Arbeitete mit etwas 2.x OpenGL und wechselte dann zu 3.x. Zuerst habe ich meinen eigenen Stack implementiert, aber später fand ich ihn nicht so gut für allgemeine Zwecke mit programmierbaren Shadern. Ich bin kein professioneller OpenGL Developer, habe nur mit meinem Code in meinem (kurzen) Leben gearbeitet. – Mars

Antwort

1

Wie Sie Ihre Matrixdaten generieren, ist mehr oder weniger irrelevant. In sehr leistungsfähigen Szenarien könnte eine Lösung gegenüber einer anderen bevorzugt sein, aber letztendlich wäre sie sehr Engine-spezifisch.

Wenn Sie den C++ - Stack verwenden möchten, um eine Hierarchie von Objekten zu haben, so sei es. Wenn Sie einen expliziten Stapel von Matrizen haben wollen, den Sie nach Belieben drücken/einfügen, dann haben Sie es. Wenn du etwas ganz anderes machen willst, liegt es an dir.

Es gibt keine richtige Antwort; Es gibt nur das, was am besten für Sie und Ihren Code funktioniert.

+0

Danke für die Antwort! Kennen Sie empfohlene Praktiken? Ich bin OpenGL sehr neu, also würde ich nicht wirklich wissen, "was am besten für mich funktioniert". Da ich sowieso komplett neuen Code schreibe, kann ich jede Methode frei wählen. Aber wenn man allgemein als der beste Weg in den meisten Szenarien angesehen wird, dann würde ich einfach nur diesen benutzen, anstatt alle Methoden auszuprobieren und weiser 5 Jahre später zu sein :) – jhyot