Bonjour,
Je cherche a afficher un cube grace aux VBO.
Les données du cube ainsi que le code sont issus du lien :http://raptor.developpez.com/tutorial/opengl/vbo/#LII-C.
je stock le cube dans un fichier .objMon VBO contient les vertex dans e meme ordre que le fichier .obj.
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 v -1.0 1.0 -1.0 v -1.0 -1.0 -1.0 v -1.0 1.0 1.0 v -1.0 -1.0 1.0 v 1.0 1.0 1.0 v 1.0 -1.0 1.0 v 1.0 1.0 -1.0 v 1.0 -1.0 -1.0 f 0 1 2 f 0 1 2 f 2 1 3 f 4 5 6 f 6 5 7 f 3 1 5 f 5 1 7 f 0 2 6 f 6 2 4 f 6 7 0 f 0 7 1 f 2 3 4 f 4 3 5
Les index sont également stockés dans le mm ordre sue le fichier .obj.
Voici comment j'initialise mon VBOet voici la fonction pour le display
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 logger.info("MESH init " + objet.getStructure().getModelFile()); VertexBufferObjectStructure vbo = objet.getStructure().getVertexBufferObject(); // Generate a new buffer object // Bind the buffer object this.nbVertices = vbo.getNbVertices(); this.verticesId = generateID(); logger.info("MESH V id " + verticesId); openGLContext.getGl().glBindBuffer(GL2.GL_ARRAY_BUFFER, verticesId); openGLContext.getGl().glBufferData(GL2.GL_ARRAY_BUFFER, GLBuffers.sizeOfBufferElem(vbo.getVertexData()) * GLBuffers.SIZEOF_FLOAT, // vbo.getVertexData().capacity() * GLBuffers.SIZEOF_FLOAT, vbo.getVertexData(), GL2.GL_STATIC_DRAW); // Index vertices this.nbIndex = vbo.getIndexNb(); this.indexId = generateID(); logger.info("MESH index id " + indexId); openGLContext.getGl().glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, indexId); openGLContext.getGl().glBufferData(GL2.GL_ELEMENT_ARRAY_BUFFER, GLBuffers.sizeOfBufferElem(vbo.getIndexV()) * GLBuffers.SIZEOF_INT, vbo.getIndexV(), GL2.GL_STATIC_DRAW);Mon rendu n'est pas bon, je n'avance pas beaucoup...
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 public void render() { OpenGLContext openGLContext = GLContextManager.getInstance().getOpenGLContext(); // vertices openGLContext.getGl().glBindBuffer(GL2.GL_ARRAY_BUFFER, verticesId); openGLContext.getGl().glVertexPointer(3, GL2.GL_FLOAT, 3 * GLBuffers.SIZEOF_FLOAT, 0); // index openGLContext.getGl().glBindBuffer(GL2.GL_ELEMENT_ARRAY_BUFFER, indexId); // Enable Pointers openGLContext.getGl().glEnableClientState(GL2.GL_VERTEX_ARRAY); // Enable Vertex openGLContext.getGl().glDrawElements(GL2.GL_TRIANGLES, nbIndex, GL2.GL_UNSIGNED_INT, 0); // gl.glDrawElements(GL.GL_TRIANGLES, nbIndex, GL.GL_UNSIGNED_INT, 0); // Disable Pointers openGLContext.getGl().glDisableClientState(GL2.GL_VERTEX_ARRAY); // Disable Vertex }
Malgré tout pouvez vous me dire si mon code est a priori correct ???
Merci d'avance![]()
Partager