2017-03-19 3 views
0

J'essaie d'extraire le squelette du format de fichier collada .dae. Je suis en mesure d'obtenir correctement les positions finales des nœuds enfants ainsi que le nœud racine, mais le reste des nœuds semble être incorrect.GLES/Java Collada (.dae) squelette d'importation

Root (Bon) -> Enfant (Parfois Bon/Mauvais Parfois) -> ... -> Enfant final (Bon)

enter image description here enter image description here

Comme vous pouvez le voir par les images, certains des jointures sont au bon endroit mais ne semblent pas se connecter correctement, d'autres articulations sont juste à plat, et les articulations finales comme la tête, les embouts, les pieds sont corrects. Je pense que je suis sur le bon chemin, mais je ne sais pas où chercher pour comprendre ce qui cause le problème.

Voici le code que j'utilise pour obtenir les matrices globales communes.

public final float[] getGlobalMatrix() { 
     if (mParent != null) { 
      Matrix.multiplyMM(mMatrix, 0, mParent.getMatrix(), 0, mLocalBoneTransformMatrix, 0); 
     } else { 
      final float[] tmp = new float[16]; 
      Matrix.setIdentityM(tmp, 0); 
      Matrix.multiplyMM(mMatrix, 0, tmp, 0, mLocalBoneTransformMatrix, 0); 
     } 
     return mMatrix; 
    } 

Je rend cela en GLEs2.0 donc je convertir les matrices que je lis depuis le fichier Collada en utilisant la méthode suivante.

private static float[] convertToGLESMatrix(final float[] colladaMatrix) { 
     final float[] result = new float[16]; 
     result[ 0] = colladaMatrix[ 0]; 
     result[ 1] = colladaMatrix[ 4]; 
     result[ 2] = colladaMatrix[ 8]; 
     result[ 3] = colladaMatrix[12]; 

     result[ 4] = colladaMatrix[ 1]; 
     result[ 5] = colladaMatrix[ 5]; 
     result[ 6] = colladaMatrix[ 9]; 
     result[ 7] = colladaMatrix[13]; 

     result[ 8] = colladaMatrix[ 2]; 
     result[ 9] = colladaMatrix[ 6]; 
     result[10] = colladaMatrix[10]; 
     result[11] = colladaMatrix[14]; 

     result[12] = colladaMatrix[ 3]; 
     result[13] = colladaMatrix[ 7]; 
     result[14] = colladaMatrix[11]; 
     result[15] = colladaMatrix[15]; 
     return result; 
    } 

Cela semble fonctionner très bien Je pensais juste que je l'ai mentionné juste au cas où ce serait un problème.

Répondre

0

Il s'avère que ma fonction de dessin transmettait certaines données par référence dans la boucle récursive et la mettait à jour causant les problèmes.