Bonjour bonjour,
Dans le programme sur lequel je suis en train de travailler, j'ai un petit soucis au niveau de l'affichage de mes objets 3D.
Chacun de mes objets 3D contient :
_ un nom,
_ un tableau de coordonnées de sommets,
_ un tableau de coordonnées de textures,
_ un tableau de coordonnées de normales,
_ un tableau d'indices
....
....
Ces objets sont stockés dans un tableau d'Objets 3D, repérés par leur nom.
Pour chaque occurrence de mon tableau, je créer les buffers qui vont bien pour ensuite afficher mes objets.
La création et le remplissage de mes buffers s'effectuent de la manière suivante :
_ Pour chaque objet du tableau
_ TabObjet[i].VerticesBuffer = gl.createBuffer();
_ Blind du buffer et remplissage
_ TabObjet[i].TextureCoordBuffer= gl.createBuffer();
_ Blind du buffer et remplissage
....
....
Je remplis ensuite un tableau d'Objets à afficher, ayant pour paramètre l'Objet3D auquel l'objet à afficher fait référence.
Ainsi, si je veux 3 cubes dans mon application, je vais créer 3 Objets à afficher faisant référence à mon Objet3D "cube".
Ma fonction d'affichage va quand à elle parcourir mon tableau d'Objets à afficher, et donc pour chacun d'entre eux, dessiner à partir des buffers de l'Objet 3D en référence.
Tous mes objets ont été testé séparément et sont correctement affichés.
L'affichage de plusieurs occurrences d'un même objet marche également.
Exemple :
Mon tableau d'Objets3D contient : Cube.
Mon tableau d'Objets à afficher contient : {Cube01,Cube},{Cube02,Cube},{Cube02,Cube}
J'ai bien 3 Cubes à l'écran.
Idem si mon tableau d'Objets3D contient un plan, une sphère ou tout ce qu'on veut.
Le soucis apparait lorsque mon tableau d'Objets3D contient plusieurs objets3D.
Exemple :
Mon tableau d'Objets3D contient : Cube,Sphère,Pyramide
Je n'aurais à l'écran que les Objets à afficher ayant pour référence le dernier Objet3D chargé, ici "Pyramide".
Je me suis dit que je devais écraser les précédents buffers.
_Mais si c'était le cas, mes Objets à afficher autre que le dernier charger devraient plutôt être remplacés par le dernier charger non?
Dans le doute, j'ai affiché les infos des buffers, juste avant l'affichage des objets concernés :
Les buffers associés à chacun de mes objets existent bien, et non pas la même taille, j'en déduis donc que le problème ne vient pas de là.Nom Objet[0] : Plan
Buffer Position Vertex : [object WebGLBuffer] / Size : 60 pour 5 Vertices
Buffer Coord Texture : [object WebGLBuffer] / Size : 40 pour 5 Coordonnées
Buffer Indice : [object WebGLBuffer] / Size : 12 pour 6 Indices
Nom Objet[1] : Sphere01
Buffer Position Vertex : [object WebGLBuffer] / Size : 7044 pour 587 Vertices
Buffer Coord Texture : [object WebGLBuffer] / Size : 4696 pour 587 Coordonnées
Buffer Indice : [object WebGLBuffer] / Size : 5760 pour 2880 Indices
Pourtant, je n'ai bien qu'une sphère à l'écran, alors que je devrais avoir un plan et une sphère.
Si je charge d'abord la sphère et ensuite le plan, alors je n'aurais que le plan à l'écran.
A noter que je ne reçois aucune erreur, sur un buffer inexistant, un nombre d'éléments trop important ou autre.
Une piste pour résoudre ce problème?
Partager