Ich lerne JOGL alleine. Ich habe gerade von GL2 zu GL3 gewechselt. Ich habe festgestellt, dass es auf dem GL3 nur wenige Tutorials gibt. Außerdem stellte ich fest, dass GL3 sich völlig von GL2 unterscheidet. Soweit ich weiß, verwendeten viele Personen Puffer, um alle Scheitelpunkte zu halten und sie an OpenGL zu binden. Als sie jedoch die Puffer initialisierten, verwendeten sie Arrays, die in der Länge festgelegt waren. Wie soll ich an einer variierenden Anzahl von Scheitelpunkten oder Objekten arbeiten, wenn die Anzahl der Scheitelpunkte von Anfang an festgelegt wurde? Gibt es einfache Beispiele? Wie kann ich mein Programm generell "dynamischer" gestalten? (d. h. eine benutzerdefinierte 3D-Welt rendern)Wie arbeiten Sie mit einer unterschiedlichen Anzahl von Scheitelpunkten in OpenGL gl3?
Antwort
Das beste, was ich mir vorstellen kann, ist das Erstellen eines großen Puffers in der Initialisierungsphase und das Ändern der Daten mit glBufferSubData()
. Eine andere Möglichkeit besteht darin, den Puffer mit glBufferData()
neu zu erstellen, obwohl dies nicht vorzuziehen ist, weil es so teuer ist, den Puffer jedes Mal neu zu erstellen, wenn eine neue Entität/ein neu erstelltes Objekt aus der Welt entfernt wird (wahrscheinlich ab und zu gut).
Danke für Ihren Vorschlag. Es scheint, dass GL3/GL4 die Flexibilität von GL2 opfern, um an Geschwindigkeit zu gewinnen. Sicherlich wird die Neuerstellung des Puffers viel Rechenzeit kosten und ich denke nicht, dass es eine gute Idee ist (aber immer noch praktikabel). – FunnyFunkyBuggy
@FunnyFunkyBuggy Nun, Sie können diese Entitäten natürlich in einer 'ArrayList' speichern, die Sie Entitäten hinzufügen oder entfernen können, wie Sie möchten und sie einzeln mit dem gleichen Puffer (ein einfacher Quad-Puffer) rendern. Aber dieser Ansatz kostet auch Ihre Leistung, da das Aufrufen vieler Draw-Aufrufe ohne Batching ebenfalls schlecht ist. – Greffin28
@FunnyFunkyBuggy Ich weiß, das ist sehr sehr spät, lol. Aber nach weiteren Recherchen bin ich zu [dem] (http://stackoverflow.com/questions/1728026/how-doi-i-use-opengl-3-x-vbos-to-render-a-dynamic-world) gerannt könnte antworten. Wenn Sie das bereits herausfinden, ignorieren Sie diesen Kommentar einfach. – Greffin28
- 1. Extrahieren einer Anzahl von einer Reihe von unterschiedlichen Längen
- 2. typeclass für Funktionen mit einer unterschiedlichen Anzahl von Argumenten
- 3. Wie mit einer nichtdeterministischen Anzahl von jQuery Versprechungen arbeiten?
- 4. FreeGLUT-Bibliothek mit OpenGL arbeiten
- 5. SQL die Anzahl der unterschiedlichen Werte in einer Spalte finden
- 6. SDL2, Mac OS X und OpenGL: Wie vermeiden Sie es, sowohl gl.h als auch gl3.h einzubeziehen?
- 7. Wie arbeiten Sie mit Arrays in Java?
- 8. In SQL kann ich Tabellen mit einer unterschiedlichen Anzahl von Spalten
- 9. SUMMIF Variable Anzahl der Spalten mit unterschiedlichen Zeilen in Excel
- 10. Wie Raytracing in modernen OpenGL?
- 11. Ist OpenGL threadsafe für mehrere Threads mit unterschiedlichen Kontexten?
- 12. SQL-Anzahl nach unterschiedlichen Beträgen kategorisiert
- 13. OpenGL: Wie man die Anzahl der Samples einer Textur erhält
- 14. Glätten von Scheitelpunkten in MeshGeometry3D (WPF)
- 15. Hinzufügen von Punkten zu Scheitelpunkten in Three.js
- 16. Wie arbeiten Sie mit Brüchen in Javascript?
- 17. Animieren Höhe auf einem div mit einer unterschiedlichen Anzahl von untergeordneten Elementen
- 18. Wie arbeiten Sie mit Sockets in C++?
- 19. Wie mische ich zwei Texturen mit unterschiedlichen Koordinaten in OpenGL ES 2.0 auf dem iPhone?
- 20. Was ist der Makrocode zum Erstellen einer Anzahl von doppelten Excel-Arbeitsmappen mit unterschiedlichen Namen?
- 21. identifizieren json Objekt aus unterschiedlichen Anzahl von Elementen
- 22. Mit einer Datenbank arbeiten
- 23. Wie identifizieren Sie identische Spalten mit unterschiedlichen Namen in Tabellen?
- 24. , wie mehrere Sätze von unterschiedlichen Werten
- 25. Wie zeichne zu einer Textur in OpenGL
- 26. Wie wird die Anzahl der Kreisdiagramme basierend auf unterschiedlichen Werten einer Spalte in Tableau berechnet?
- 27. Reagieren js: Invariant Verletzung: processUpdates(), wenn Sie eine Tabelle mit einer unterschiedlichen Anzahl von untergeordneten Zeilen Rendering
- 28. Winkel zwischen 3 Scheitelpunkten
- 29. Iterieren durch Objekte mit einer gemeinsamen Basisklasse in unterschiedlichen Speicher
- 30. Erstellen Nebenhandlungen mit unterschiedlichen Formen in matplotlib
Es hängt von der durchschnittlichen Größe und Lebensdauer Ihrer Objekte ab – elect
Also, gibt es noch konkretere Beispiele? Sagen wir mal, wenn ich einen Mini-Blender (das 3D-Modellierungsprogramm) machen soll, kann der Benutzer eine kleine Menge von Objekten erzeugen und modifizieren? Welchen Ansatz sollte ich nehmen? Oder, wenn ich mit einer großen Anzahl von Objekten umgehen müsste (vielleicht eine Mini-Minecraft-Welt) Welchen Ansatz sollte ich nehmen? – FunnyFunkyBuggy
Wenn wir über Dinge sprechen, die vom Benutzer geändert werden, bedeutet dies eine lange Lebensdauer in Computerbegriffen. Sie sollten nur den alten Puffer löschen und den neuen Puffer erstellen, wenn sich die Anzahl der Scheitelpunkte ändert. Derselbe Ansatz für eine Mini-Minecraft-Welt. Um Ihnen einige Zahlen zu geben, benötigt ein CAD-Programm, an dem ich arbeite, mit über 4.000 Objekten und über 27 Millionen Dreiecken insgesamt etwa 1 Sekunde, um die gesamte Geometrie (Position, Normale und Indizes) auf die GPU zu übertragen. gtx 770) – elect