Bonjour a tous,
j'essaye actuelement de faire un générateur de heightmap pour apprendre opengl.
pour comparer le rendu avec gl_triangle_fan et gl_triangle_strip j'ai crée un index pour chaque type de rendu et cela fonctionne correctement sans Index Buffer Object par contre si j'en utilise un, mon programme plante avec un "erreur de segmentation" ou au mieux dans certain cas affiche n'importe quoi.
J'y est passé pas mal d'heure mais rien a faire sa ne fonctionne pas et je ne sais toujours pas pourquoi donc j'éspere que quelqu'un aura une solution a me proposé.
voici mon d'initialisation des VBO qui ne change pas:
Voila ma fonction d'affichage qui affiche correctement mais qui n'utilise pas mon Index Buffer Object:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void init_vbo () { glewInit(); glGenBuffers(2, BufferName); glBindBuffer (GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]); glBufferData (GL_ARRAY_BUFFER, nb_subdiv * nb_subdiv * 3 * sizeof (GLfloat), Sommets, GL_STATIC_DRAW); glBindBuffer (GL_ARRAY_BUFFER, 0); glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, BufferName[BUFFER_INDEX]); glBufferData (GL_ELEMENT_ARRAY_BUFFER, (nb_subdiv - 2) * (nb_subdiv - 2) * 10 * sizeof (GLuint), Index, GL_STATIC_DRAW); glBindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0); }
Celle qui l'utilise mais qui plante avec un "Erreur de Segmentation":
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void dessine_vbo () { glBindBuffer(GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]); glVertexPointer (3, GL_FLOAT, 0, BUFFER_OFFSET(0)); glEnableClientState ( GL_VERTEX_ARRAY ); glBindBuffer(GL_ARRAY_BUFFER, 0); glMultiDrawElements(GL_TRIANGLE_FAN, Count, GL_UNSIGNED_INT, Index, (nb_subdiv - 2) * (nb_subdiv - 2)); glDisableClientState ( GL_VERTEX_ARRAY ); }
enfin celle qui fonctionne mais qui affiche n'importe quoi:
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 void dessine_vbo () { glBindBuffer(GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]); glVertexPointer (3, GL_FLOAT, 0, BUFFER_OFFSET(0)); glEnableClientState ( GL_VERTEX_ARRAY ); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[BUFFER_INDEX]); glMultiDrawElements(GL_TRIANGLE_FAN, Count, GL_UNSIGNED_INT, BUFFER_OFFSET(0), (nb_subdiv - 2) * (nb_subdiv - 2)); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDisableClientState ( GL_VERTEX_ARRAY ); }
j'ai mis en rouge se qui change d'un version a une autre. en espérant que quelqu'un comprennent pourquoi cela ne fonction pas.
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 void dessine_vbo () { glBindBuffer(GL_ARRAY_BUFFER, BufferName[BUFFER_VERTEX]); glVertexPointer (3, GL_FLOAT, 0, BUFFER_OFFSET(0)); glEnableClientState ( GL_VERTEX_ARRAY ); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[BUFFER_INDEX]); glMultiDrawElements(GL_TRIANGLE_FAN, Count, GL_UNSIGNED_INT, Index, (nb_subdiv - 2) * (nb_subdiv - 2)); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); glDisableClientState ( GL_VERTEX_ARRAY ); }
merci d'avance!
Partager