Векторы поворотов 3D камеры тилинг - PullRequest
1 голос
/ 15 января 2010

Надеюсь, простой ответ, но я не могу его получить.

У меня есть движок 3D-рендеринга, который я написал.

У меня есть положение камеры, положение взгляда и вектор вверх.

Я хочу иметь возможность наклонять камеру влево, вправо, вверх и вниз. Как камера на фиксированном штативе, которую вы можете взять за ручку и наклонить ее вверх, вниз, влево, вправо и т. Д.

Математика ставит меня в тупик. Мне удалось выполнить панорамирование вперед / назад и панорамирование вверх / вниз / влево / вправо, но я не могу обработать векторную математику, чтобы заставить ее наклоняться.

Для наклона влево и вправо я хочу повернуть положение поворота вокруг положения камеры, но мне нужно учитывать вектор подъема, в противном случае поворот не знает, какую ось повернуть.

Математика / алгоритм, который мне нужен, похож на ...

Камера = (сх, су, CZ) LookAt = (лк, LY, LZ) Up = (их, иу, UZ)

RotatePointAroundVector (лк, LY, LZ, их, иу, UZ, сумма)

Кто-нибудь может помочь с математикой?

Большое спасибо.

Ответы [ 3 ]

2 голосов
/ 15 января 2010

Вы можете сделать точку перед камерой, затем повернуть ее вокруг камеры (с помощью триггера) и использовать lookat () для вращения камеры.

Это не сработает, когда вы начнете использовать крен (вращение вокруг Z). Так что вы можете создать класс камер на основе кватернионов. Эта ссылка помогла мне: gpwiki.org / Quaternion ...

0 голосов
/ 14 июня 2010

Обычно вы визуализируете локальную систему координат для вашей камеры.

local Z является вектором обзора (от центра камеры до точки обзора) и находится «на экране». локальный Y будет вверх по экрану. Если вы сохраняете вектор наклона вашей камеры перпендикулярно вектору обзора камеры, то вектор наклона также является локальным Y. local X будет нормальным к двум другим осям (это их перекрестное произведение после их нормализации ).

Вращение влево-вправо - это вращение вектора подстановки вокруг локальной оси Y (рыскание). Поворот вверх-вниз - это вращение вектора вверх и вектора подстановки вокруг локальной оси X (шага). « Наклон головы» влево-вправо - это вопрос вращения вектора вокруг локальной оси Z (банка).

Каждый раз, когда вы меняете вектор подстановки или вектор поднятия, вам необходимо пересчитывать локальные оси.

0 голосов
/ 15 января 2010

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

Чтобы получить горизонтальную плоскость, вы можете получить один вектор в качестве перекрестного произведения вектора восходящего и вектора наблюдателя. Затем вы можете получить другой ортогональный вектор, взяв скалярное произведение вверх и найденный вектор. Не забудьте нормализовать три вектора.

Затем возьмите точечное произведение вашей камеры, чтобы посмотреть вектор с вашими тремя векторами, и теперь сделайте поворот вокруг горизонтальной плоскости (обрабатывая ваши векторы, как если бы они были координатной осью).

Извините, что изложил все это словами. Надеюсь, это поможет.

...