[Résolu] tableau d'index pour un maillage en triangle_strip
Bonjour,
Je travaille actuellement sur la creation d'un maillage en openGl, je suis face a un probleme qui me pose pas mal de soucis.
Je crée, via un VBO, un maillage regulier affiché avec un GL_TRIANGLE_STRIP, cependant, au bout de chaque bande, le dernier segment vient reboucler sur le premier de la bande suivante.
voici un exemple sur un tout petit maillage :
http://nsa01.casimages.com/img/2007/...0531570405.jpg
Visiblement la solution est de passer par un tableau d'index pour specifier l'ordre des points et d'utiliser a la place de mon :
Code:
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4*mesh_height*mesh_width);
un :
Code:
glDrawElements( GL_TRIANGLE_STRIP, 4*(mesh_width*mesh_height), GL_UNSIGNED_INT, indices);
Mon probleme vient du calcul de ces indices, je n'arrive pas a comprendre l'ordre des points, et comment le construire.
Pour aider :
voici la création des points (j'ai volontairement remplacé la composante sur Z par 0.0f pour eviter de charger trop le post) :
Code:
1 2 3 4
| pos[k++] = make_float3(x, 0.0f, y);
pos[k++] = make_float3(x+1.0f, 0.0f, y);
pos[k++] = make_float3(x, 0.0f, y+1.0f);
pos[k++] = make_float3(x+1.0f, 0.0f, y+1.0f); |
je fais l'equivalent d'une boucle sur x et sur y (via de la programmation GPGPU sur Cuda pour ceux qui connaissent. (et pas d'inquietude pour les float3, ca marche bien)
C'est equivalent a :
Code:
1 2 3 4 5 6 7 8 9
|
k=0;
for(int x=0;x<width;x++)
for(int y=0;y<width;y++){
pos[k++] = make_float3(x, 0.0f, y);
pos[k++] = make_float3(x+1.0f, 0.0f, y);
pos[k++] = make_float3(x, 0.0f, y+1.0f);
pos[k++] = make_float3(x+1.0f, 0.0f, y+1.0f);
} |
Merci bien ! ;)