2017-03-19 6 views
0

私はcolladaの.daeファイル形式からスケルトンを抽出しようとしています。私は最終的な子ノードの位置を適切に取得することができますが、ルートノードは残りのノードが正しくないように見えます。GLES/Java Collada(.dae)スケルトンのインポート

ルート(グッド) - >子(時にはグッド/時々悪い) - > ... - >最終子供(グッド)

enter image description here enter image description here

あなたが画像で見ることができるように、いくつかのジョイントの適切な位置にあるが、適切に接続されていないように見える、他の関節は間違ってフラットであり、頭、ファインダーのヒント、足のような最終的な関節は正しいです。私は正しい道のりだと思っていますが、問題の原因を突き止める場所を確かめていません。

ここでは、ジョイントグローバルマトリックスを取得するために使用しているコードを示します。

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; 
    } 

私はので、私は、私は次のメソッドを使用して、COLLADAファイルから読み込ま行列を変換していますGLEs2.0でこれをレンダリングしています。

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; 
    } 

これはうまく機能しているようですが、私はちょうどそれが問題だった場合にそれを言いました。

答えて

0

私の描画機能は、再帰的なループで参照によってデータを渡していたことが原因で問題が発生していたことが判明しました。

関連する問題