PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : OpenGL: Single Quads vs. Quad-Strip


Einfachkrank
2004-08-27, 14:18:51
Hi,

ich bin gerade an meinem Level Editor dran und experimentiere etwas mit dem Terrain. Dabei bin ich auf folgende Frage gestoßen. Bei mir sieht ne Standard Funktion zum Rendern des Terrains so aus:


for(int i=xstart; i < xend; i++)
{
glBegin(GL_QUAD_STRIP);
for(int j=zstart; j < zend; j++)
{
glVertex3f(terrain[(i*numpolz)+j].x, terrain[(i*numpolz)+j].y, terrain[(i*numpolz)+j].z; // 1. Vertex
glVertex3f(terrain[(i*numpolz)+j+1].x, terrain[(i*numpolz)+j+1].y, terrain[(i*numpolz)+j+1].z; // 2. Vertex
glVertex3f(terrain[((i+1)*numpolz)+j].x, terrain[((i+1)*numpolz)+j].y, terrain[((i+1)*numpolz)+j].z; // 3. Vertex
glVertex3f(terrain[((i+1)*numpolz)+j+1].x, terrain[((i+1)*numpolz)+j+1].y, terrain[((i+1)*numpolz)+j+1].z; // 4. Vertex
}
glEnd();
}
Jetzt könnte ich doch aber eigentlich den 3. und 4. Vertex vertauschen und könnte das ganze mit GL_QUADS rendern...
Jetzt meine Frage: Warum werden bei dem Strip die selben Punkte angegeben? In nem Strip wird ja folgendermaßen gerendert:

1 --> 2
/
/
3(5)-4(6)
/
/
7 --> 8

wobei jetzt der 3te und 4te wieder gleich mit dem 5ten und 6ten Vertex sind... Was soll das ganze dann? Spart man beim Strip nicht Geschwindigkeit dadurch, dass man quasis den 5ten und 6tem bei den Quads auslässt und mit dem 7ten und 8ten im Strip weitermacht? Versteht ihr worauf ich hinauswill?:D

MFG Einfachkrank

marco42
2004-08-28, 12:14:56
Also, ich wuerde von quads abraten, da die meistens noch in triangles zerlegt werden. das macht die sache langsamer, nimm lieber triangle strips, am besten vertex arrays mit vbo's. Das duerfte wesentlich schneller sein. es gibt da eine lub von nvidia, nvstrip oder so, damit kannst du optimale triangle strips erstellen.

Xmas
2004-08-28, 14:56:09
wobei jetzt der 3te und 4te wieder gleich mit dem 5ten und 6ten Vertex sind... Was soll das ganze dann? Spart man beim Strip nicht Geschwindigkeit dadurch, dass man quasis den 5ten und 6tem bei den Quads auslässt und mit dem 7ten und 8ten im Strip weitermacht? Versteht ihr worauf ich hinauswill?:D
Jap, ich verstehe, dass du das Strip-Prinzip etwas missverstanden hast ;)
Du sollst die Eckpunkte ja gar nicht doppelt angeben! Das doppelte Verwenden macht die GPU doch selbst. Die letzten beiden glVertex3f() in deiner Schleife sind Verschwendung.

Einfachkrank
2004-08-29, 22:10:58
Alles klar, ich habs! Wie sollte ich eine große Menge an Polygonen rendern un Geschwindigkeit zu sparen und wenns nicht in strips geht? Triangles in Listen packen?

liquid
2004-08-30, 00:16:20
Indizierte Triangles wären eine Möglichkeit.

cya
liquid