2013-02-26 12 views
12

Ich bin derzeit neu in der OpenGL ES 2.0 Bereich und würde gerne so viel wie ich kann in Bezug auf Bindung, Puffer, Shader, etc.OpenGL - warum ist GL_ELEMENT_ARRAY_BUFFER für Indizes?

Jetzt verstehe ich nur, um die Unterschiede zwischen zu verstehen GL_ELEMENT_ARRAY_BUFFER und GL_ARRAY_BUFFER und wann die einzelnen Presets zu verwenden sind.

Mein derzeitiges Verständnis führt mich zu der Annahme, dass GL_ELEMENT_ARRAY_BUFFER speziell für Indizes für die genannten Dreiecke ist, während der andere für alles andere ist.

Könnte jemand bitte erläutern, warum und ob das korrekt ist? Wie wird GL_ELEMENT_ARRAY_BUFFER anders behandelt?

Antwort

19

GL_ELEMENT_ARRAY_BUFFER wird verwendet, um anzuzeigen, dass der Puffer, den Sie präsentieren, die Indizes jedes Elements im "anderen" Puffer (GL_ARRAY_BUFFER) enthält.

So, wie ein sehr einfaches Beispiel mit den Eckpunkten nur (keine anderen Daten), wenn Sie einen Index-Puffer haben:

{0, 1, 2} {0, 2, 3}

und den Datenpuffer enthält:

{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}}

Dann, wenn Sie glDrawElements aufrufen, weiß es, um die Scheitelpunkte 0, 1 & 2 für das erste Dreieck, dann 0, 2, 3 für die zweite (dh: im Grunde ein Quadrat) auszuwählen.

Dies wird nützlich, wenn Sie komplexere Modelle mit vielen Scheitelpunkten haben & Gesichtern - da viele der Flächen die gleichen Scheitelpunkte haben (daher müssen Sie die gleichen Daten nicht erneut senden).

Hinweis: Das obige Beispiel zeigt nur Vertices - Sie können dort beliebig viele Daten verschachteln (Vertexfarben, Normalen, Texturkoordinaten ... usw.).

+0

Dies ist das Verständnis, das ich kennen gelernt habe. Die einzige wirkliche Frage, die ich habe, ist, warum das Wort ELEMENT im Puffer-Tag? Das ist es, was mich jedes Mal abstößt, weil ... es ist nur ein ARRAY. Ich würde es nicht ganz als Elementarfeld bezeichnen. – TheCodingArt

+1

Persönlich bedeutet der Begriff "Element" in diesem Namen für mich ein Array von "Element" -Referenzen - da der Datenpuffer beliebige Daten enthalten kann - aber jede Gruppierung von Daten (Vertex + Normal + Farbe + Texkoord) kann grundsätzlich sein als "Element" bezeichnet. – goatherder

+0

Nun, das Element-Array enthält nur die Reihenfolge des Arrays mit den Elementen ... das ist der einzige logische Grund, den ich mir vorstellen kann, was für mich keinen Sinn ergibt. Warum wird der GL_ARRAY_BUFFER nicht als Elementpuffer bezeichnet, wenn er die Elemente enthält? Dort bin ich ein wenig verloren, lol. – TheCodingArt

10

Dies hat meist historische Gründe. Zurück, als es keine VBOs gab, waren die mit glVertexPointer und ähnlichem angegebenen Zeiger nicht mit einem OpenGL-Objekt irgendeiner Art "assoziiert". Als VBOs eingeführt wurden, ging dieses Verhalten in die Semantik von VBOs über, die ein anderes Pufferziel für Indizes und Attribute erforderten.

Mit der Einführung von allgemeinen Vertex-Attributen wurde eine solche Assoziationsfunktionalität hinzugefügt.

Heute ist es meist ein Hinweis auf die OpenGL-Implementierung zu wissen, auf welche Art und Weise die Daten adressiert werden, um den Datenfluss entsprechend zu optimieren. Aber es funktioniert auch gut als eine mentale Erinnerung an den Programmierer, was derzeit behandelt wird.

Verwandte Themen