#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