OpenGLSkybox (CubeMap) движение вместе с движением камеры - PullRequest
0 голосов
/ 21 ноября 2018

Я следил за некоторыми онлайн-уроками OpenGL для проекта с открытым миром, над которым я работаю.Цель состоит в том, чтобы создать сцену с открытым миром с несколькими объектами (горы и т. Д.).Я подумал, что было бы неплохо реализовать скайбокс, а затем добавить в него все объекты.

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

Я хотел бы спросить, существует ли какой-либо способ, позволяющий камере свободно перемещаться внутри скайбокса, «взаимодействуя» с потенциальными объектами в нем, но фактически не выходя за границы бокса.В онлайн-уроках перевод камеры удален, поэтому он может только смотреть вокруг, не перемещаясь.

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Перво-наперво, когда вы визуализируете скайбокс, вы обычно не визуализируете реальный бокс.

Скайбокс содержит вещи, которые обычно никогда или очень медленно не изменяются и находятся так далеко, чтоигрок никогда не достигнет.Скайбокс хранится в текстуре кубической карты и отображается в полноэкранном прямоугольнике.В шейдере вы используете выборку кубических карт OpenGL путем выборки с вектором глаза на карту.

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

Некоторое время назад я написал статью о том, как это сделать: GLSL Skybox (Вам потребуется обновить код до современной версии OpenGL через ...)

0 голосов
/ 22 ноября 2018

Skybox обычно визуализируется без смещения камеры, потому что его содержимое представляет материал очень далеко (во много раз больше, чем фактическое движение камеры), например звезды или горы, которые находятся на расстоянии многих километров.Таким образом, даже если вы движетесь со скоростью 100 м в любом направлении, результат рендеринга не изменяется вообще (или очень мало, что не может быть распознано).

Если ваш скайбокс содержит то, к чему вы хотите двигаться, это выполнимо, новам нужно ограничить движение, чтобы вы не подходили слишком близко, так как это приведет к пикселизации скайбокса и в конечном итоге даже к его пересечению.Это можно сделать с помощью игрового ландшафта (вы не можете прыгать выше граничных гор или плавать слишком далеко от острова и т. Д.)

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

...