Математическая формула для 3D-игры от первого лица

Я хочу сделать 3D-игру от первого лица, но не могу правильно настроить формулу камеры.

Итак, у меня есть поворот: от 0 до 359. Далее координаты x, y, z остаются прежними.

Поворот камеры: 0 - вперед, 90 - влево, 180 - назад, 270 - вправо, но я могу адаптировать его

Какова формула камеры?

Платформа: Panda3d, python, opengl.

Спасибо


person Horatiu Jeflea    schedule 20.12.2010    source источник
comment
Если бы вы могли опубликовать пример кода и объяснить, что он должен делать и что он фактически делает, вам было бы легче ответить.   -  person FrustratedWithFormsDesigner    schedule 20.12.2010
comment
А разве у вас нет поворота камеры вверх/вниз? Обычно повороты рассчитывают исходя из того, где находится камера и куда она смотрит.   -  person ewanm89    schedule 20.12.2010
comment
Да, но какова формула для этого?   -  person Horatiu Jeflea    schedule 20.12.2010
comment
Что ж, API обычно предоставляет средства для того, чтобы просто ввести вид и положение и использует матричный расчет всей сцены для расчета следующей матрицы по уровням. В графическом программировании есть три матричных уровня: Мир, Вид и Проекция. Я не знаю API panda3d, но поскольку opengl включает в себя возможность расчета следующей матрицы для вас.   -  person ewanm89    schedule 20.12.2010


Ответы (2)


Хорошо, похоже, вам нужно движение камеры в стиле Doom, то есть никаких поворотов вверх-вниз. Учти это:

  1. Вам нужно визуализировать «мир», как он виден через камеру.
  2. Предполагая, что положительное значение x находится справа, а положительное значение y находится впереди вас, когда камера движется вправо, изображение мира перемещается влево.
  3. Когда камера поворачивается положительно влево, изображение мира поворачивается вправо.

Теперь попробуем составить уравнения:

1. Во-первых, переведите мировые координаты в положение камеры:

Xwt = Xw - Xc;
Ywt = Yw - Yc;
Zwt = Zw;

(Xc,Yc,Zc) = camera position
(Xw,Yw,Zw) = world coordinates of object in the scene
(Xwt,Ywt,Zwt) = world coordinates of object translated to camera position

2. Теперь поверните переведенные координаты на угол, противоположный вращению камеры:

Xwc =  Xwt * Cos(psi) + Ywt * Sin(psi);
Ywc = -Xwt * Sin(psi) + Ywt * Cos(psi);
Zwc =  Zwt

Psi = angle of camera rotation
(Xwc,Ywc,Zwc) = world coordinates of object transformed to camera orientation

Вы можете объединить два шага и преобразовать их в матричную форму.

person ysap    schedule 20.12.2010

Позже я нашел учебник, который решил мою проблему:

https://www.panda3d.org/forums/viewtopic.php?t=3037

person Horatiu Jeflea    schedule 20.12.2010