Я начинающий программист, и я создаю проект, который позволяет мне ходить по комнатам с помощью камеры от первого лица. До сих пор я рисовал здания и продолжал, но теперь я застрял и не знаю, как сделать камеру от первого лица, чтобы я мог ходить вокруг.
Кто-нибудь может указать мне на класс камеры, который я мог бы использовать, или какой-нибудь полезный код?
Ответы:
Вот несколько советов по повороту камеры (мышиный взгляд). После наивной реализации класса камеры с нуля, я обнаружил, что мне пришлось сделать несколько дополнительных настроек для хорошего поведения вращения:
Сбрасывайте координаты мыши по центру экрана в каждом кадре, чтобы мышь не попадала на границы экрана
Сохраните вектор «вверх» камеры (запретить поворот) и пересчитайте вектор «в сторону»
Не разрешать смотреть вверх за вертикальную ось + ось или вниз за ось -у (слишком далеко вверх / вниз)
Получите правильный порядок поворотов (сначала вверх / вниз, затем влево / вправо)
Перенормируйте векторы «вверх», «цель» и «в сторону» в каждом кадре
Надеюсь, вы можете использовать часть этого кода в ваших интересах:
Обратите внимание, что:
mouseAxisX и mouseAxisY определены как +/- 1, в зависимости от того, хотите ли вы инвертировать вид мыши по оси x или y. Обычно игры предлагают эту опцию хотя бы для вертикальной оси.
MIN_UPWARDS_TILT_DEG определено равным 1,0 градусу (поэтому зрителю разрешено смотреть от -89 градуса вниз до +89 градуса вверх, что довольно убедительно выглядит как полный вертикальный диапазон 180 градусов - пропущенные 2 градуса в крайних значениях весьма незначительны) ,
camera.aim_, camera.right_ и camera.up_ - это, конечно, 3D-векторы, и метод rotateAboutAxis (), который вы можете объединять в википедии и любом количестве онлайн-источников. Y_AXIS - вектор с фиксированной константой (0,1,0).
ASSERT_ORTHONORMAL () - это проверка работоспособности только в режиме отладки, которая никогда не компилируется в режиме оптимизации / выпуска.
Заранее извиняюсь за код в стиле C ... опять же, вот вам совет от парня по имени Mediocritus! ; ^)
источник
Есть несколько способов сделать это (см. Учебники здесь , здесь и здесь, например, с большим количеством других доступных в Интернете через Google). Технология, используемая в ресурсах, которые вы можете найти в Интернете, может незначительно отличаться (с точки зрения D3D, XNA, OpenGL и так далее), но основные принципы будут такими же:
Вы можете выбрать сохранение векторов напрямую или пересчитывать базовую матрицу представления каждый раз, когда вам нужно и что вы предпочитаете. Методика очень гибкая, поэтому, если вам нужна помощь, помимо этих общих шагов, вы можете опубликовать новый вопрос с более конкретным запросом.
источник
Для конкретной ссылки на реализацию системы камер с использованием Direct3D я рекомендую эту статью: http://www.toymaker.info/Games/html/camera.html . Автор также описывает другие методы и функции, которые могут быть использованы для расширения реализации.
источник