Vertexarray: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(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 11. August 2008, 00:54 Uhr

Hinweis: Dieser Artikel wird gerade Offline bearbeitet!

Bitte haben Sie etwas Geduld und nehmen Sie keine Änderungen vor, bis der Artikel hochgeladen wurde.

(weitere Artikel)
WIP Offline.jpg

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();