Effizientes Zeichnen in OpenGL ES

In meiner Anwendung zeichne ich viele Cubes über OpenGL ES Api. Alle Würfel haben die gleichen Abmessungen, nur befinden sie sich an verschiedenen Koordinaten im Raum. Ich kann mir zwei Arten vorstellen, sie zu zeichnen, aber ich bin mir nicht sicher, welche die effizienteste ist. Da ich kein OpenGL-Experte bin, habe ich mich entschlossen, hier nachzufragen.

Methode 1, das ist, was ich jetzt benutze: Da alle Würfel identische Abmessungen haben, berechne ich Scheitelpunktpuffer, Indexpuffer, Normalpuffer und Farbpuffer nur einmal. Während einer Aktualisierung der Szene gehe ich alle Cubes durch, führe bufferData () für denselben Puffersatz aus und zeichne dann das Dreiecksnetz des Cubes mit drawElements (). Da sich jeder Würfel an einer anderen Position befindet, übersetze ich die mvMatrix, bevor ich zeichne. bufferData () und drawElements () werden für jeden Cube ausgeführt. Bei dieser Methode spare ich wahrscheinlich viel Speicher, indem ich die Puffer nicht jedes Mal berechne. Aber ich mache viele drawElements () -Aufrufe.

Methode 2 wäre: Behandle alle Würfel als eine Menge von Polygonen, die über die gesamte Szene verteilt sind. Berechnen Sie Scheitelpunkte, Indizes, Farben und normale Puffer für jedes Polygon (tatsächlich Dreiecke innerhalb der Polygone) und verschieben Sie diese in einem einzigen Aufruf von bufferData () in den Grafikkartenspeicher. Zeichnen Sie sie dann mit einem Aufruf von drawElements (). Der Vorteil dieses Ansatzes ist, dass ich nur einen Aufruf von bindBuffer und drawElements vornehme. Der Nachteil ist, ich benutze viel Speicher, um die Puffer zu erstellen.

Meine Erfahrung mit OpenGL ist begrenzt genug, um nicht zu wissen, welche der oben genannten Methoden unter Performance-Gesichtspunkten besser ist.

Ich verwende dies in einer WebGL-App, aber es ist eine allgemeine OpenGL ES-Frage.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage