В 3D-сценах каждый кадр мы постоянно обновляем матрицу локального мира 4x4, которая может переводить 3D-объект из локальной системы координат в мировую систему координат. Но я не могу понять матрицу, которая может заставить трехмерный объект вращаться вдоль своей локальной оси Y. Поскольку я не знаю локальный восходящий вектор 3D-объекта, я знаю только матрицу local->world и постоянно обновляю ее. Как люди справляются с этим?
повернуть символ по локальной оси Y
Ответы (1)
Чтобы повернуть объект, вам нужна матрица вращения. Это должно быть ясно. И в большинстве библиотек есть методы для генерации таких матриц вращения.
Ваша проблема, похоже, заключается в том, что делать с этой матрицей. Вы хотите использовать его для изменения существующего преобразования мира. В основном есть два варианта. В дальнейшем я предполагаю матричную компоновку по столбцам, используемую OpenGL. Порядок матриц для DirectX обратный.
Вариант 1: умножить слева:
newWorld = rotationMatrix * oldWorld
Это вращает объект в глобальной системе координат.
Вариант 2: Умножить справа:
newWorld = oldWorld * rotationMatrix
Это вращает объект в его местной системе координат. Вероятно, это то, что вы ищете.
Кстати, если у вас есть преобразование мира, вы знаете локальную ось Y, которая является всего лишь вторым столбцом матрицы.