2017-05-02 9 views
1

AndroidのOpenGLESアプリでボーンアニメーションを実装する際に問題が発生しています。 モデルの場合、私は3ds maxでエクスポートされたFBXファイルをassimpで変換し、テキストファイルに変換しました。このファイルには、骨のデータをロードする(頂点、重み、行列をオフセット、階層構造など)Android OpenGLESボーンアニメーションの問題

私はバインドを得ることができ、私は単位行列として、骨基質を送信する場合のポーズ:

enter image description here

その後、私は保存します各ノードの子及びこのブロブが結果である。このコード

public void setBoneHeirarchy() 
{ 

    for (Bone b : mRootBones) 
    { 
     setBoneTransformations(b, mRootTransform);//From assimp aiScene->mRootNode->mTransformation 
    } 
} 

private void setBoneTransformations(Bone b, Matrix4 parent) 
{ 
    Matrix4 globalTransform = new Matrix4(); 
    globalTransform.multMatrix(parent); //[this].multMatrix([arg]) multiplies the matrix like [this] = [this] * [arg] 
    globalTransform.multMatrix(b.nodeTransformation); //loaded from assimp as aiNode->mTransformation 

    b.transformation.loadIdentity(); //the final transformation to return 
    b.transformation.multMatrix(mRootTransformInverse); //Inverse of mRootNode->mTransformation 
    b.transformation.multMatrix(globalTransform); //calculated above 
    b.transformation.multMatrix(b.offsetMatrix); //read from text file (converted with assimp) 

    for (Bone child: b.children) 
     setBoneTransformations(child, globalTransform); 
} 

を使用して再帰的に両親によってノード変換行列を乗算:

enter image description here

は、私はこれを取得するので、私の骨の重みとIDが正しいと思う: i.stack.imgur.com/fcTro.png 私がしようとしていた変換行列

の1を翻訳チュートリアルogldev.org/www/tutorial38/tutorial38.html

に従うと、今私はどこでエラー

行列を読み込むに問題があるか、それが計算されるために検索する場所を知っているのですか?

答えて

0

私は行列乗算の多くの組み合わせを試した後、それを解決し

私は右のそれをロードした後
  • は、行列を転置のColladaファイル形式にFBXから切り替えた後、私自身の形式に変換するすべての
    1. ファースト
    2. assimpからロードされたノード変換を乗算するのではなく、アニメーションノードの平行移動、回転、スケーリングのベクトルから行列を作成しました。

    FBX形式に問題があったことをGoogle検索で助けてくれたColladaに変更していたかどうかは完全にはわかりません。