Нахождение направления XYZ от вращения вокруг XYZ

Я работаю над космическим шутером, где вы можете вращать свой корабль вокруг осей x, y и z и таким образом стрелять в любом направлении. Чтобы повернуть корабль (я использую openGL в c ++), я поворачиваю на 0-360 градусов вокруг оси x, y или z. Камера всегда будет смотреть в одном и том же направлении (вниз вдоль оси z, как «по умолчанию»). Вы просто смотрите на вращающийся корабль.

Пример: glRotatef (-90,0f, 1,0f, 0,0f, 0,0f);
Приведенный выше пример повернёт корабль на -90 градусов вокруг оси x. Если бы корабль вращался вверх вдоль положительной оси y, как в обычном космическом шутере до вращения, то после поворота корабль указывал бы вдоль отрицательной оси z.

То, что я изо всех сил пытаюсь выяснить, — это как в любое время вычислить «направление» корабля и превратить его в vector3d (x, y, z внутри класса с именем vector3d).

Я вычисляю положение (еще один vector3d, просто x, y и z) любого движущегося объекта, добавляя текущую позицию (xyz) к скорости, которую я также сохраняю в vector3d, и умножаю ее на время дельты (время с последнего кадра / обновления). ). Когда я стреляю снарядом с космического корабля, я хочу иметь вектор направления корабля, чтобы использовать его в качестве основы для скорости стреляющего снаряда, чтобы я мог рассчитать положение снаряда так же, как я вычисляю положение других объектов, просто добавляя текущую позицию снаряда к скорости, умноженной на deltatime.

Поскольку у меня есть направление корабля в форме вращения вокруг x, y и z, я полагаю, что должно быть возможно каким-то образом превратить это в vector3d, который представляет то же направление в векторном формате (если это имеет смысл).

1

Решение

Возьмите вектор интересующего вас направления, например, Z ось исходного не повернутого корабля. Это вектор как (0,0,1), Теперь примените к нему матрицу вращения, как вы найдете в glRotate документация. Вы можете спокойно игнорировать последнюю строку и столбец этой матрицы, поскольку вы вращаетесь только вокруг источника. Результатом умножения матрицы на вектор будет изображение вектора под заданной матрицей вращения.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector