1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
//Création VBO
glGenBuffers( 1, &TestBuffers);
//Vertex buffer object
glBindBuffer(GL_ARRAY_BUFFER, TestBuffers);
glBufferData(GL_ARRAY_BUFFER, (3*sizeof(GLfloat)*13074)+
3*sizeof(GLfloat)*73572), NULL, GL_STATIC_DRAW);//13074 correspond à la taille de mon tableau de vertex plan_[13074][3] de meme 73572 à la taille du tableau de normale normal[73572][3 ]
glBufferSubData(GL_ARRAY_BUFFER, 0, 3* sizeof(GLfloat)*13074, plan_vertex);
glBufferSubData(GL_ARRAY_BUFFER, 3* sizeof(GLfloat)*13074, 3*sizeof(GLfloat)*73572, plan_normals);
glGenBuffers(1, &buf_indice);
//Index Buffer Object
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buf_indice);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLint)*3*plan_nbFace, plan_indice, GL_STATIC_DRAW);
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, sizeof(GLint)*3*plan_nbFace, plan_indice);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
...
//Affichage VBO
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glBindBuffer(GL_ARRAY_BUFFER, TestBuffers);
glVertexPointer(3, GL_FLOAT, 0,BUFFER_OFFSET(0));
glNormalPointer(GL_FLOAT, 0, BUFFER_OFFSET(3*sizeof(GLfloat)*13074));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, buf_indice);
glDrawElements(GL_TRIANGLES, (plan_nbFace*3), GL_UNSIGNED_INT, BUFFER_OFFSET(0));
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
/* desactivation des tableaux de sommet */
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY); |
Partager