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 :



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 : Sélectionner tout - Visualiser dans une fenêtre à part
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4*mesh_height*mesh_width);
un :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 !