2010-08-14 4 views
2

J'utilise la bibliothèque de pavage GPC et sort des bandes triangulaires. L'exemple montre le rendu comme ceci:Convertir des bandes triangulaires en triangles?

for (s = 0; s < tri.num_strips; s++) 
{ 
    glBegin(GL_TRIANGLE_STRIP); 
    for (v = 0; v < tri.strip[s].num_vertices; v++) 
     glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y); 
    glEnd(); 
} 

La question est dans le fait que cela rend les bandes de triangle multiples. C'est le problème pour moi. Mon application rend avec VBO's, notamment 1 VBO pour 1 polygone. Je besoin d'un moyen de modifier le code ci-dessus afin que la place pourrait ressembler à quelque chose plus comme ceci:

glBegin(GL_TRIANGLES); 
for (s = 0; s < tri.num_strips; s++) 
{ 
    // How should I specify vertices here?  
} 
glEnd(); 

Comment pourrais-je faire cela?

Répondre

10

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

Par 1 vbo par polygone je veux dire une série de triangles, désolé – jmasterx

Questions connexes