Это очень простая проблема, но я просто не могу найти полный ответ нигде.
Рассмотрим, что объект движется вдоль оси z с заданной СКОРОСТЬЮ. (Пример: -0.2 opengl units) Теперь я поворачиваю объект вокруг своей локальной оси с углами поворота X, Y и Z.
Вопрос: какова следующая позиция моего объекта?
Я использую следующие уравнения (которые, как я знаю, ошибаются, но я просто не могу сделать их правильно)
positionX += -SPEED * Math.sin(rotationY * Utils.DEG)* Math.cos(rotationX * Utils.DEG);
positionY += SPEED * Math.sin(rotationX * Utils.DEG);
positionZ += -SPEED * Math.cos(rotationX * Utils.DEG)* Math.cos(rotationY * Utils.DEG);
Где моя ошибка?
Я бы сохранил вектор, представляющий ориентацию объекта.
При вращении поверните вектор ориентации.
Когда вы двигаетесь,
positionX += SPEED * orientation.X
positionY += SPEED * orientation.Y
etc.