Математическая формула для 3D игры от первого лица
Вопрос
Я хочу сделать 3D -игру от первого лица, но я не могу правильно установить формулу камеры.
Так что у меня есть вращение: от 0 до 359. Далее x, y координаты, z остается прежним.
Вращение камеры: 0 - спереди, 90 - слева, 180 - назад, 270 - справа, но я могу его адаптировать
Какая формула для камеры?
Платформа: Panda3d, Python, OpenGL
Спасибо
Решение
Хорошо, похоже, вам нужно движение камеры в стиле Doom, т.е. нет поворотов вниз. Учти это:
- Вам нужно отобразить «мир», как видно через камеру.
- Предполагая, что положительный X находится справа, а положительный Y - на ваш фронт, когда камера движется вправо, изображение мира движется влево.
- Когда камера положительно поворачивается влево, изображение мира поворачивается вправо.
Теперь давайте попробуем построить уравнения:
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
Вы можете объединить два шага и преобразовать его в матричную форму.
Другие советы
Позже я нашел учебник, который исправил мою проблему: