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 :
un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part glDrawArrays(GL_TRIANGLE_STRIP, 0, 4*mesh_height*mesh_width);
Mon probleme vient du calcul de ces indices, je n'arrive pas a comprendre l'ordre des points, et comment le construire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part glDrawElements( GL_TRIANGLE_STRIP, 4*(mesh_width*mesh_height), GL_UNSIGNED_INT, indices);
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) :
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)
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);
C'est equivalent a :
Merci bien !
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); }![]()
Partager