Bonjour bonjour,
Voila, je suis en train de réaliser un loader de .obj pour une application en OpenGL ES.
Aucun problème pour afficher l'objet, mais ça part en vrille lors du placage de ma texture.
Pour illustrer mon problème, on va prendre l'exemple d'un plan :
Je le construis à l'aide de deux triangles.
Si le plan est formé des sommets ABCD, je passe à OpenGL les indices suivants : 0/1/2 3/2/1.
(Soit les triangles ABC et DCB)
Mon plan s'affiche correctement.
Passons aux coordonnées de textures.
Je passe à OpenGL une texture 2D, via un floatbuffer contenant les coordonnées de textures suivantes :
0,1 / 0,0 / 1,1 / 1,0 / 1,1 / 0,0.
Dans ce sens, le placage marche très bien.
Mais pour un autre plan d'indices : 0/1/2 2/3/0
(Soit les triangles ABC et CDA)
Et avec les coordonnées de textures correspondantes :
0,0 / 1,0 / 1,1 / 1,1 / 0,1 / 0,0
Le placage par en vrille.
On dirait qu'OpenGL n'utilise que les 4 coordonnées, à savoir une par sommet (comme s'il dessinait mon plan en GL_QUADS, pour les textures).
J'ai déjà vérifié le contenu des buffers que je passe à OpenGL (pour les coordonnées de textures, de vertex et les indices pour créer mes faces) à coup de débug, c'est correcte.
Ci-après comment j'affiche mon plan plein :
Pour tous les mesh que je load, l'affichage à l'écran est correcte, même les plus compliqués.
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 gl.glFrontFace(GL10.GL_CCW); gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mFVertexBuffer); gl.glEnable(GL10.GL_TEXTURE_2D); gl.glActiveTexture(GL10.GL_TEXTURE0); gl.glBindTexture(GL10.GL_TEXTURE_2D, mTexturePick); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE); gl.glTexParameterx(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE); gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, mFTextVertexBufferPick); gl.glDrawElements(GL10.GL_TRIANGLES, NbFacesIndices, GL10.GL_UNSIGNED_BYTE, mIndexBufferFaces); gl.glDisable(GL10.GL_TEXTURE_2D);
J'en conclus donc que mes indices (mIndexBufferFaces) passés à glDrawElements sont bon.
Seul le placage de texture ne fonctionne pas.
Pour chaque triangle que je dessine, je dois bien donner 3 coordonnées de textures?
Merci d'avance pour vos réponses![]()
Partager