Bonjour,
Dans une scène 3D WebGL, j'affiche actuellement des objets en utilisant des gl.ARRAY_BUFFER pour stocker leur attributs (coordonnées de texture, normales) que je fournit ensuite au shader en utilisant gl.vertexAttribPointer.
Par conséquent, j'ai les limitations suivantes :
- Il faut définir cet attribut pour chaque vertex (si j'ai 136 vertex, j'ai 136 coordonnées de texture et 136 normales etc ...).
- Il m'est impossible de définir un attribut différent pour chaque face utilisant un même vertex.
Pour schématiser mon problème, prenez par exemple un cube, il possède 8 sommets et 6 faces. Chaque sommet "possède" trois faces, mais pour chacune de ces faces, la normale sera différente.
Pour dessiner correctement un cube, je dois donc définir pour chacune des faces ses 4 sommets différencié de ceux des autres faces pour pouvoir leur appliquer le bon attribut de normale, j'ai donc 24 sommets dans mon ARRAY_BUFFER.
J'ai cherché plusieurs tutoriels de WebGL, et à chaque fois le cube est dessiné en utilisant une liste de 24 sommets.
Ce que je souhaite faire, c'est :
- Utiliser une liste d'index (différente de celle utilisée pour dessiner avec drawElements()) pour affecter à chaque vertex que je dessine un attribut différent. J'aurais ainsi dans le cas du cube mes 8 sommets ainsi qu'un buffer contenant les 6 normales des faces et une liste d'index de même taille que la liste d'index pour dessiner les faces qui contiendrait les identifiants de normales.
- Éventuellement pouvoir définir un attribut à un triangle entier, afin d'avoir un buffer plus petit (dans le cas du cube, la normale est identique pour les 4 sommet d'une même face).
C'est surement très simple, vu que beaucoup de formats 3D utilisent ce genre d'index, mais je pense que je trouve pas car le terme m'échappe.
Je précise que j'ai fait très peu d'OpenGL, je m'y suis vraiment avec le WebGL.
Que faut t'il faire ?
Merci d'avance,
Ga3L
Partager