Vorurteile
Ok, was ich bisher gesammelt habe, ist Folgendes:
- Verwenden Sie keine feste Pipeline (veraltet oder veraltet)
- vbos speichern "Objektmodelle" (meistens n Scheitelpunktdaten)
- vaos beschreiben, wie Daten abgelegt werden, damit Draw-Aufrufe wissen, welcher Teil jedes vbo für welche Art von Vertex-Informationen bestimmt ist (ein vao kann sich auf mehrere vbos beziehen, das Gegenteil ist etwas schwierig).
- Jeder Draw-Aufruf sendet auch Vertex-Daten an Shader
Wie ich 3D sehe (optional)
Angesichts dieser Informationen kann ich sehen, wie schön das Zeichnen komplizierter 3D-Objekte mit modernem OpenGL ist. Grundsätzlich laden Sie eine Reihe von Objektmodellen (wahrscheinlich von Blender oder einer ähnlichen Software) in VBOs mit lokalen Koordinaten und geben dann für jede Instanz eines Objekts einfach einen anderen Shader-Parameter (Offset) an, um ihn in den Weltraum zu zeichnen.
Problem / Frage
In 2D sind Probleme und Prioritäten jedoch völlig unterschiedlich. Sie zeichnen nicht viele komplexe Objekte, Sie benötigen keine komplizierten Projektionsmatrizen und so weiter und Shader sind viel einfacher.
Was wäre der beste Weg, um mit modernem OpenGL häufig (wirklich häufig, im Grunde jeden Rahmen) Geometriewechsel zu zeichnen?
Im folgenden Absatz sehen Sie einige Problemideen (das Kreis- und Rechteckproblem), die die Art der Änderungen, an denen ich interessiert bin, besser identifizieren.
Meine Versuche (optional)
Also begann ich zu überlegen, wie ich mit dem Zeichnen grundlegender 2D-Geometrie auf dem Bildschirm umgehen würde:
- Ein Quadrat: Laden Sie ein
[(1, 0), (1, 1), (0, 1), (0, 0)]
VBO für die Geometrie eines Quadrats im lokalen Raum und geben Sie dem Shader die tatsächliche Breite des Quadrats sowie die Weltkoordinaten und Farbinformationen an
kühlt ab, sieht einfach aus. Gehen wir zu einem Kreis:
- ein Kreis: Dreiecksfächer mit ... eh. Wie viel Präzision (Anzahl der Eckpunkte)? Für kleine Kreise muss die Genauigkeit klein sein und für Fehlerkreise muss die Genauigkeit hoch sein. Das eindeutige Laden von 1 VBO kann möglicherweise nicht in alle Fälle passen. Was ist, wenn ich Präzision hinzufügen muss, weil die Größe eines Kreises größer ist?
Weniger cool. Gehen wir zu etwas etwas Einfacherem, einem Rechteck:
- ein Rechteck: eh. Es gibt keine "allgemeine Rechteckgeometrie". Sie haben nur ein Verhältnis von Breite zu Höhe und das war's, aber jedes Rechteck ist wahrscheinlich anders, wenn sich die Größe ändert.
Wie Sie sehen können, geht es von dort aus bergab. Besonders bei komplexen Polygonen und so weiter.
Keine Code-Richtlinie: P.
Ich brauche nur einen Überblick über die Idee, es ist kein Code erforderlich, insbesondere C- oder C ++ - Code. Sagen Sie einfach Dinge wie: "Erstellen Sie ein VBO mit diesen Scheitelpunktdaten und binden Sie es dann, ...".