Salut tout le monde, j'ai deux questions.
Voila premiére question :
j'ai la géométrie de mes objets définie par ses vertices, les normales à ces vertices, et idface qui contient les indices des vertices ( par exemple si idface[0] = 1, idface[1] = 5 et idface[2] = 3 donc les vertices 1,5,et 3 forment une face. Jusqu'a la easy.
Ensuite j'ai mes coordonnées de textures, et les indices de textures idfacemap ( par exmple si idfacemap[0] = 2 , idfacemap[1] = 5 et idfacemap[2] = 7, la premiére face aura comme coordonnées de texture celle compris dans texcoord[2] , texcoord[5], texcoord[7].
C'est une structure tout ce qui a de plus classique, comme la présente 3D Studio dans ses fichiers par exemple. Voila le (faux) code qui explique un peu ça:
Jusqu'a la tout va bien, mais quand je veu mettre tout ça dans un vertex array, qu'es ce que je fais du idfacemap
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 float vertex[] = {...} // les vertex de l'objet float normal[] = {...} // les normales correspondantes unsigned int idface[] = {...} // les indices vertex des faces float texcoord[] = {...} // les coordonnées des textures float idfacemap[] = {...} // les indices textures des faces //et j'affiche comme ça glBegin(GL_TRIANGLES); for (unsigned int i=0;i<nbface*3;i++) { glNormal3fv(&vnorm[idface[i]*3]); glTexCoord2fv(&map[idfacemap[i]*2]); glVertex3fv(&vert[idface[i]*3]); } glEnd();:
:
La mon objet aura sa texture plaquée n'importe comment vu qu'on ne fait pas d'appele à idfacemap
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 float vertex[] = {...} // les vertex de l'objet float normal[] = {...} // les normales correspondantes unsigned int idface[] = {...} // les indices vertex des faces float texcoord[] = {...} // les coordonnées des textures float idfacemap[] = {...} // les indices textures des faces // il faut bien comprendre que idfacemap != idface, d'ou mon probléme //à l'affichage glVertexPointer (3, GL_FLOAT, 0, vertex ); glNormalPointer ( 3, GL_FLOAT, normal); glTexCoordPointer(2, GL_FLOAT, 0 ,texcoord); glDrawElements (GL_TRIANGLES, 3, GL_UNSIGNED_INT, idface );.
Peut - être qu'il faut que je réarrange mes données, mais c'est bizard je pense que c'est possible comme ça vu que 3DS me la donne comme ça
HELP![]()
2éme question:
j'allais essayer mais si quelqu'un à la reponse : si je spécifie la géométrie de mes objets avec un vertex array, et que je place tout ça dans une display list, que ce passe t-il quand j'appelle cette liste
: Et si ça fonctionne malgrés tout, que se passe t il en fait
:
Quelle la différence entre une display list, un vertex array, un vertex array compilé du point de vue de la mémoire / de la mémoire de la carte graphique. Je crois que les vertex array compilés sont stockés en mémoire graphique, mais pour les autres, ça se passe comment ?
Partager