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

StackOverflow https://stackoverflow.com/questions/4490570

  •  11-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

Платформа: Panda3d, Python, OpenGL

Спасибо

Это было полезно?

Решение

Хорошо, похоже, вам нужно движение камеры в стиле 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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top