Vertexarray: Unterschied zwischen den Versionen
Philip (Diskussion | Beiträge) |
Philip (Diskussion | Beiträge) (angefangen) |
||
Zeile 2: | Zeile 2: | ||
===Vertexarray=== | ===Vertexarray=== | ||
+ | |||
+ | Bei einem Vertexarray werden die Vertexdaten in einem Array zur Grafikkarte geschickt. | ||
==Was sind Vertexarrays== | ==Was sind Vertexarrays== | ||
+ | Ein Vertexarray ist ein großes Array, in dem die Vertexdaten stehen. Idealerweise existiert dabei jeder Vertex nur einmal in diesem Array. Daneben wird noch ein Indexarray erstellt, dass auf die Vertices in dem Vertexarray verweist. Anhand dieses Indexarrays wird gezeichnet. Natürlich können | ||
+ | auf einzelne Vertices aus dem Indexarray heraus mehrfach verwiesen werden. | ||
==Wie helfen Vertexarrays bei der Performance== | ==Wie helfen Vertexarrays bei der Performance== | ||
+ | Dadurch, dass alle Daten an einem Block liegen und die GPU stumpf die Daten abarbeiten kann, sind die Vertexarrays weitaus schneller als die [[glBegin]]/[[glEnd]]-Methode. Werden die Daten dann auch noch als [[Displayliste]] an die Grafikkarte geschickt, kommt Freude auf. :) | ||
+ | Außerdem wird Speicher gespart, indem durch die Indirektstufe, die man durch das Indexarray hat, einen Vertex mehrfach zeichnen kann. | ||
==Verwendung== | ==Verwendung== | ||
+ | Wie wird nun so ein Vertexarray aufgebaut und gezeichnet?<br> | ||
+ | Beispiel, wie es intern abläuft für zwei nebeneinanderliegende 2D-Quads:<br> | ||
+ | Vertexarray vertices: {(0.0f, 0.0f), (0.0f, 1.0f), (1.0f, 0.0f), (1.0f, 1.0f), (2.0f, 0.0f), (2.0f, 1.0f)}<br> | ||
+ | Indexarray indices: {0, 2, 3, 1, 2, 4, 5, 3}<br> | ||
+ | Beim Zeichnen wird nun folgendermaßen vorgegangen: | ||
+ | <cpp> | ||
+ | int vertexCount = length(i); | ||
+ | glBegin(GL_QUADS); | ||
+ | for (int i = 0; i < vertexCount; ++i) { | ||
+ | int vIndex = indices[i]; | ||
+ | Vertex2F v = vertices[vIndex]; | ||
+ | glVertex2f(v[0], v[1]); | ||
+ | } | ||
+ | glEnd(); | ||
+ | </cpp> |
Version vom 10. August 2008, 23:54 Uhr
Bitte haben Sie etwas Geduld und nehmen Sie keine Änderungen vor, bis der Artikel hochgeladen wurde. |
Inhaltsverzeichnis
Vertexarray
Bei einem Vertexarray werden die Vertexdaten in einem Array zur Grafikkarte geschickt.
Was sind Vertexarrays
Ein Vertexarray ist ein großes Array, in dem die Vertexdaten stehen. Idealerweise existiert dabei jeder Vertex nur einmal in diesem Array. Daneben wird noch ein Indexarray erstellt, dass auf die Vertices in dem Vertexarray verweist. Anhand dieses Indexarrays wird gezeichnet. Natürlich können auf einzelne Vertices aus dem Indexarray heraus mehrfach verwiesen werden.
Wie helfen Vertexarrays bei der Performance
Dadurch, dass alle Daten an einem Block liegen und die GPU stumpf die Daten abarbeiten kann, sind die Vertexarrays weitaus schneller als die glBegin/glEnd-Methode. Werden die Daten dann auch noch als Displayliste an die Grafikkarte geschickt, kommt Freude auf. :) Außerdem wird Speicher gespart, indem durch die Indirektstufe, die man durch das Indexarray hat, einen Vertex mehrfach zeichnen kann.
Verwendung
Wie wird nun so ein Vertexarray aufgebaut und gezeichnet?
Beispiel, wie es intern abläuft für zwei nebeneinanderliegende 2D-Quads:
Vertexarray vertices: {(0.0f, 0.0f), (0.0f, 1.0f), (1.0f, 0.0f), (1.0f, 1.0f), (2.0f, 0.0f), (2.0f, 1.0f)}
Indexarray indices: {0, 2, 3, 1, 2, 4, 5, 3}
Beim Zeichnen wird nun folgendermaßen vorgegangen:
int vertexCount = length(i); glBegin(GL_QUADS); for (int i = 0; i < vertexCount; ++i) { int vIndex = indices[i]; Vertex2F v = vertices[vIndex]; glVertex2f(v[0], v[1]); } glEnd();