/ / XMMATRIX Разлага не дава правилния мащаб, въртене и преобразуване - c ++, матрица, directx, интерполация, кватерниони

XMMATRIX Decompose не дава правилния мащаб, ротация и превод - c ++, матрица, directx, интерполация, quaternions

Направих моя двигател за издърпване и го направих да работиза 1 матрица / рамка / кост. Все пак това е огромен брой данни, така че искам да отида по-далеч и да направя 1 матрица / ключови кадри / кост, за да мога да интерполирам въртенето и преобразуването на костта (мащабът винаги е 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) и след това отново се сглобява в крайната матрица, но не получавам оригиналната матрица назад. (използвайки temp matrix дава правилни резултати, но използването на крайната матрица не)

Изглежда ми липсва нещо съвсем тривиално тук, може ли някой да го отбележи, моля?

Отговори:

0 за отговор № 1

Изглежда, че е публикуван правилният код, но в моята програма той е дефектен, тъй като пропуснах една от транспонираните.