perticularly 1 VBO pour 1 polygone
Whoa. 1 VBO par polygone ne sera pas efficace. Tue toute la raison du tampon vertex. L'idée de vertex buffer est d'insérer autant de vertices que vous le pouvez. Vous pouvez placer plusieurs bandes triangulaires dans un seul tampon de sommets ou rendre des primitives séparées qui sont stockées dans un seul tampon.
je besoin d'un moyen de modifier le code ci-dessus afin que, au lieu qu'il pourrait regarder quelque chose comme ceci:
Cela devrait fonctionner:
glBegin(GL_TRIANGLES);
for (v= 0; v < tri.strip[s].num_vertices-2; v++)
if (v & 1){
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
}
else{
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
}
glEnd();
Parce que trianglestrip triangulation va comme ceci (les nombres représentent les indices de vertex):
0----2
| /|
|/|
|/|
|/ |
1----3
Remarque: I a Supposons que les sommets des triangles sont stockés dans le même ordre que dans ma photo ET que vous voulez que les sommets des triangles soient envoyés dans le sens inverse des aiguilles d'une montre. Si vous voulez qu'ils soient CW, puis utiliser le code différent:
glBegin(GL_TRIANGLES);
for (v= 0; v < tri.strip[s].num_vertices-2; v++)
if (v & 1){
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
}
else{
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
}
glEnd();
Par 1 vbo par polygone je veux dire une série de triangles, désolé – jmasterx