私はcolladaの.daeファイル形式からスケルトンを抽出しようとしています。私は最終的な子ノードの位置を適切に取得することができますが、ルートノードは残りのノードが正しくないように見えます。GLES/Java Collada(.dae)スケルトンのインポート
ルート(グッド) - >子(時にはグッド/時々悪い) - > ... - >最終子供(グッド)
あなたが画像で見ることができるように、いくつかのジョイントの適切な位置にあるが、適切に接続されていないように見える、他の関節は間違ってフラットであり、頭、ファインダーのヒント、足のような最終的な関節は正しいです。私は正しい道のりだと思っていますが、問題の原因を突き止める場所を確かめていません。
ここでは、ジョイントグローバルマトリックスを取得するために使用しているコードを示します。
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;
}
これはうまく機能しているようですが、私はちょうどそれが問題だった場合にそれを言いました。