/ / XMMATRIX Decompor não fornece escala, rotação e tradução corretas - c ++, matriz, directx, interpolação, quaternions

XMMATRIX Decompose não fornece escala, rotação e tradução corretas - c ++, matriz, directx, interpolação, quaternions

Eu estou fazendo meu motor de esfolar e tenho que trabalharpara 1 matriz / estrutura / osso. No entanto, isso é um grande número de dados, então eu quero ir mais além e fazer 1 matriz / quadro-chave / bone, para que eu possa integrar a rotação e a translação de um osso (o escalonamento é sempre 1 em cada eixo, então estou ignorando isso) . Para isso eu quero decompor uma matriz (estrutura XMMATRIX) para vetor (escala), rotação quaternária e vetor de translação, interpolar e remontar uma matriz a partir deles. Meu código é aproximadamente:

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

Neste código curto eu tento decompor o corretomatriz (temp) e, em seguida, remontar na matriz final, mas eu não recebo a matriz original de volta. (usando a matriz temporária dá resultados corretos, mas usando a matriz final não)

Parece que estou sentindo falta de algo muito trivial aqui, alguém poderia dizer isso por favor?

Respostas:

0 para resposta № 1

Parece que o código correto foi postado, mas no meu programa estava com defeito, como eu perdi uma das transposições.