Лучший способ заставить камеру двигаться и вращаться - PullRequest
3 голосов
/ 26 января 2009

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

Конечно, с этим есть некоторые проблемы, например, какую матрицу мы должны сначала использовать при умножении, и код будет некрасивым.

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

Ответы [ 2 ]

5 голосов
/ 26 января 2009

Сохраните детали обзора камеры в виде вектора положения, вектора обзора и вектора подъема (подумайте о том, чтобы указывать пальцем вверх: палец - это вектор обзора, а палец - вектор вверх). Держите эти векторы нормализованными и под углом 90 градусов друг к другу. Вы должны увидеть, что этих трех векторов достаточно для представления любого положения и ориентации камеры.

Вы можете использовать эти векторы для преобразования мировых координат в координаты камеры:

  • Перевести по-позиции;
  • Поворот вокруг (вектор «вверх», «крест», ось y) на - (угол между вектором вверх и ось y);
  • Поворот вокруг вектора вверх на - (угол между вектором обзора и осью z).

(у меня там могли быть некоторые мои признаки неправильного пути).

Вы можете преобразовать эти векторы, когда пользователь перемещает мышь:

  • Когда мышь движется вбок, поверните вектор обзора вокруг вектора вверх (или, если хотите, поверните вектор обзора и вектор вверх вокруг оси y).
  • Когда мышь перемещается назад / вперед, поворачивайте вектор обзора и вектор вверх (вектор креста вектор вверх).
0 голосов
/ 26 января 2009

У меня нет решения вашей проблемы, но я знаю, что у 3d-движка с открытым исходным кодом Irrlicht есть FPS-камера, которая делает именно то, что вы ищете, и, как правило, она имеет хорошо документированный источник.

Вы можете попробовать посмотреть, как камера FPS реализована в Irrlicht, или вы даже можете использовать сам Irrlicht для своего проекта; я использовал его для своей пары, когда учился в колледже, и он всегда работал как шарм:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...