/ / XMMATRIX Decomposeは正しいスケール、回転、平行移動を行いません - c ++、matrix、directx、interpolation、quaternions

XMMATRIX Decomposeは正しいスケール、回転、平行移動を行いません - c ++、matrix、directx、interpolation、quaternions

私はスキニングエンジンを作って働かせている1マトリックス/フレーム/骨。しかし、それは膨大な数のデータですので、さらに進んで1つのmatrix / keyframe / boneを実行したいので、骨の回転と平行移動を解析することができます(スケーリングは常に各軸で1ですので無視します) 。そのためには、(スケーリングベクトル)、回転四元数、並進ベクトルのための行列(XMMATRIX構造)を分解し、それらを補間し、行列を再構成したいと思います。私のコードはおおよそです:

XMMATRIX temp;
{..} //Fill it from a file
temp = XMMatrixTranspose( temp ); //Transposing temp because it was in a shader-readable format
XMVECTOR scal; //for scaling
XMVECTOR quat; //for rotation
XMVECTOR tran; //for translation
XMMatrixDecompose(&scal,&quat,&tran,temp);

XMMATRIX final=XMMatrixIdentity()*XMMatrixScalingFromVector(scal)*XMMatrixRotationQuaternion(quat)*XMMatrixTranslationFromVector(tran);
final = XMMatrixTranspose( final ); //Transposing to get back the shader format

この短いコードで私は正しいものを分解しようとします行列(temp)を読み込み、最後の行列で再構成しますが、元の行列を元に戻すことはできません。 (一時行列を使用すると正しい結果が得られますが、最終行列を使用すると結果は得られません)

それは私がここで何か非常に些細なことを見逃しているようだ、誰かがそれを指摘できますか?

回答:

回答№1は0

正しいコードが掲載されたようですが、私のプログラムでは、転置の1つを見逃したので、それは誤りでした。