Как разложить неизвестную матрицу преобразования?

#math #matrix #directx

#математика #матрица #directx

Вопрос:

Я работаю над обновлением старой 3D-игры (созданной с использованием Direct3D), и у меня проблемы с анимацией игровых объектов.

В игре анимация объектов хранится в двоичных файлах, которые содержат матрицы преобразования для каждой кости ее сеток в каждом кадре анимации (в виде массива D3DMATRIX ).

Я пытался использовать D3DXMatrixDecompose функцию для определения положения, поворота и масштаба, но, похоже, с анимацией что-то не так. Некоторые анимации почти соответствуют оригиналам, но в середине анимации есть некоторые странные повороты (масштабный вектор переходит от отрицательных значений к положительным, и это заставляет всю кость вращаться странным образом — это определенно неправильно), а для других анимаций все это неправильно.

Я где-то читал, что функция D3DXMatrixDecompose предполагает, что матрица была составлена как матрица SRT, и, по-видимому, порядок, в котором каждый компонент был объединен в матрице, имеет значение. Итак, поскольку анимации явно неправильные, я предполагаю, что, возможно, матрицы не были составлены в порядке SRT, и вывод D3DXMatrixDecompose неверен.

Я не нашел много материала, чтобы прочитать об этом, не углубляясь в математику. Поскольку у меня нет большого опыта в математике, надеюсь, кто-нибудь сможет указать мне правильное направление.

Итак, как я могу разложить положение, поворот и масштаб неизвестной матрицы преобразования? Я не прошу уникального алгоритма, который может это сделать, я спрашиваю, что я могу сделать в этом сценарии, чтобы найти исходные (или эквивалентные) значения для положения, поворота и масштаба каждой матрицы.

Заранее спасибо!

Комментарии:

1. Вам придется немного почитать математику … math.stackexchange.com/questions/237369 / … и это для матрицы вращения -> кватернион, например: euclideanspace.com/maths/geometry/rotations/conversions /…

2. Взгляните на реализацию XMMatrixDecompose в DirectXMath