/ / XMMATRIX Decompose non fornisce scala, rotazione e traduzione corrette - c ++, matrice, directx, interpolazione, quaternioni

XMMATRIX Decompose non fornisce scala, rotazione e traduzione corrette - c ++, matrice, directx, interpolazione, quaternioni

Sto facendo il mio motore di skinning e l'ho fatto funzionareper 1 matrice / telaio / osso. Tuttavia questo è un enorme numero di dati, quindi voglio andare oltre e fare 1 matrice / keyframe / bone, così posso intepolare la rotazione e la traduzione di un osso (il ridimensionamento è sempre 1 su ciascun asse, quindi sto ignorando quello) . Per questo voglio decomporre una matrice (struttura XMMATRIX) per (vettore di ridimensionamento), quaternioni di rotazione e vettore di traslazione, interpolarli e rimontare una matrice da essi. Il mio codice è all'incirca:

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

In questo codice breve cerco di scomporre il correttomatrice (temp) e quindi riassemblare nella matrice finale, ma non riesco a recuperare la matrice originale. (usare la matrice temporanea dà risultati corretti, ma non usare la matrice finale)

Mi sembra che manchi qualcosa di molto banale qui, qualcuno potrebbe indicarlo per favore?

risposte:

0 per risposta № 1

Sembra che sia stato pubblicato il codice corretto, ma nel mio programma era difettoso, in quanto mi mancava una delle trasposizioni.