Bonsoir,
Je cherche à charger et afficher un modèle MD5 dans mon application Java/Android (OpenGL ES).
Pour ce faire, j'utilise une classe VertexArray:
Constructeur de la class VertexArray
J'affiche mes array avec cela:
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
23
24
25
26 public VertexArray(Vert[] vertices, short[] index){ //Building float array float[] vert = new float[vertices.length * 3]; for(int i = 0; i < vertices.length; i++){ vert[3*i] = vertices[i].position.x; vert[3*i + 1] = vertices[i].position.y; vert[3*i + 2] = vertices[i].position.z; } ByteBuffer vbb = ByteBuffer.allocateDirect(vert.length * 3 * 4); vbb.order(ByteOrder.nativeOrder()); vertex = vbb.asFloatBuffer(); vertex.put(vert); vertex.position(0); //Building index ByteBuffer ibb = ByteBuffer.allocateDirect(index.length * 2); ibb.order(ByteOrder.nativeOrder()); indexes = ibb.asShortBuffer(); indexes.put(index); indexes.position(0); size = (short) (index.length); }
Jusque là rien d'extraordinaire.. Seulement, j'obtiens quelque chose de bizarre (voir en pièce jointe).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public void drawVertexArray(GL10 gl, int mode, VertexArray va){ gl.glVertexPointer(3, GL10.GL_FLOAT, 0, va.getVertex()); gl.glDrawElements(mode, va.getSize(), GL10.GL_UNSIGNED_SHORT, va.getIndexes()); }
Mon modèle est tout plat...
Je pense que le problème vient du calcul des positions:
Si quelqu'un avait une idée..
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 private void computeVert(Mesh m){ for(int j = 0; j < m.getVertices().length; j++){ Vect3f finalVect = new Vect3f(); for(int k = 0; k < m.getVertices()[j].countWeight; k++){ Weight w = m.getWeights()[m.getVertices()[j].startWeight + k]; Joint joint = squeleton[w.joint]; Vect3f wv; wv = Tools.rotatePoint(joint.orientation, w.position); finalVect.x += (joint.position.x + wv.x) * w.bias; finalVect.y += (joint.position.y + wv.y) * w.bias; finalVect.z += (joint.position.z + wv.z) * w.bias; } m.getVertices()[j].position = finalVect; } }
Merci d'avance.
Partager