повернуть символ по локальной оси Y

В 3D-сценах каждый кадр мы постоянно обновляем матрицу локального мира 4x4, которая может переводить 3D-объект из локальной системы координат в мировую систему координат. Но я не могу понять матрицу, которая может заставить трехмерный объект вращаться вдоль своей локальной оси Y. Поскольку я не знаю локальный восходящий вектор 3D-объекта, я знаю только матрицу local->world и постоянно обновляю ее. Как люди справляются с этим?


person Bill Banks    schedule 27.10.2015    source источник


Ответы (1)


Чтобы повернуть объект, вам нужна матрица вращения. Это должно быть ясно. И в большинстве библиотек есть методы для генерации таких матриц вращения.

Ваша проблема, похоже, заключается в том, что делать с этой матрицей. Вы хотите использовать его для изменения существующего преобразования мира. В основном есть два варианта. В дальнейшем я предполагаю матричную компоновку по столбцам, используемую OpenGL. Порядок матриц для DirectX обратный.

Вариант 1: умножить слева:

newWorld = rotationMatrix * oldWorld

Это вращает объект в глобальной системе координат.

Вариант 2: Умножить справа:

newWorld = oldWorld * rotationMatrix

Это вращает объект в его местной системе координат. Вероятно, это то, что вы ищете.

Кстати, если у вас есть преобразование мира, вы знаете локальную ось Y, которая является всего лишь вторым столбцом матрицы.

person Nico Schertler    schedule 27.10.2015