Salut à tous!
Je suis en train de développer un petit moteur et je me heurte à un sacré problème avec les VBOs.
J'ai fais beaucoup de recherches sur ce forum et même sur le net mais je n'arrive pas à trouver ce qui ne colle pas.
En fait je charge un fichier .3DS et je récupère les points de mon mesh.
Ensuite je crée un tableau d'indices.
J'ai vérifié le contenu des tableaux et tout semble ok.
Pourtant, au rendu j'obtient n'importe quoi. Des triangles qui se forment n'importe comment.
Pour mes test j'utilise un objet simple (une cube).
Voici un morceau de mon code :
avec NB_VERTEX le nombre de vertex et SIZE_VERTEX le nombre de coordonnées (ici 3).
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
17
18
19
20
21
22 /* Initialisations */ glGenBuffers(1, &bufPos); glGenBuffers(1, &bufColor); glGenBuffers(1, &bufIndex); //Les positions des vertex glBindBuffer(GL_ARRAY_BUFFER, bufPos); glBufferData(GL_ARRAY_BUFFER, NB_VERTEX*SIZE_VERTEX*sizeof *posVertex, NULL, GL_STREAM_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, NB_VERTEX*SIZE_VERTEX*sizeof *posVertex, posVertex); //Les couleurs glBindBuffer(GL_ARRAY_BUFFER, bufColor); glBufferData(GL_ARRAY_BUFFER, NB_VERTEX*SIZE_COLOR*sizeof *colorVertex, NULL, GL_STREAM_DRAW); glBufferSubData(GL_ARRAY_BUFFER, 0, NB_VERTEX*SIZE_COLOR*sizeof *colorVertex, colorVertex); //Les index glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufIndex); glBufferData(GL_ELEMENT_ARRAY_BUFFER, NB_FACES*3*sizeof *indexVertex, NULL, GL_STREAM_DRAW); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, NB_VERTEX*sizeof *indexVertex, indexVertex); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); //Plus de buffer a utiliser
Rendu:
De plus, ce code ne fonctionne pas même quand je crée un tableau de points à la main ainsi que son tableau d'indices!!
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
17 glBindBuffer(GL_ARRAY_BUFFER, bufPos); glVertexPointer(SIZE_VERTEX, GL_FLOAT, 0, BUFFER_OFFSET(0)); glBindBuffer(GL_ARRAY_BUFFER, bufColor); glColorPointer(SIZE_COLOR, GL_UNSIGNED_BYTE, 0, BUFFER_OFFSET(0)); /* activation des tableaux de sommets */ glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufIndex); glDrawElements(GL_TRIANGLES, NB_FACES*3, GL_UNSIGNED_INT, BUFFER_OFFSET(0)); //Dessine l'objet glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); /* desactivation des tableaux de sommet */ glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY);
Avez-vous une idée d'où peut se trouver le hic?
J'attends vos réponses avec impatience parce que là je ne m'en sors pas du tout.
Merci beaucoup![]()
Partager