Камеры
Объект-камера решает, что видит посетитель и как он перемещается.
Режимы управления
| Режим | Посетитель… |
|---|---|
none | не может двигать камеру — вы управляете ей сами |
orbit | перетаскиванием вращается вокруг цели, колесом приближает |
fly | свободно летает клавишами и мышью |
firstPerson | оглядывается с места, где стоит; курсор захвачен |
lock | курсор захвачен, но камера продолжает следовать за своим объектом |
lockfirstPerson отдаёт саму камеру управлению курсором, что отцепляет её от объекта — годится
для зрителя, обходящего модель, и бесполезно для персонажа, потому что камера перестаёт следовать
за телом.
lock захватывает курсор точно так же, но оставляет камеру прикреплённой, а движение мыши
передаёт вашему скрипту. Вот это — игра от первого лица.
Настройки orbit
orbit стоит по умолчанию, потому что подходит для просмотра товаров, и настроек у него больше
всего:
| Настройка | Что делает |
|---|---|
target | точка, вокруг которой вращаемся |
enableRotate · enablePan · enableZoom | какие жесты разрешены |
minDistance · maxDistance | насколько близко и далеко можно подойти |
minPolarAngle · maxPolarAngle | насколько можно заходить сверху и снизу |
enableDamping · dampingFactor | насколько движение продолжается по инерции |
autoRotate · autoRotateSpeed | медленное вращение в простое |
Ограничивать полярный угол стоит почти в любом просмотрщике товара: это не даёт людям уйти под пол и увидеть сцену снизу, что никаким освещением не выглядит намеренным.
Объектив
fov — поле зрения в градусах: 50 — естественное значение по умолчанию, меньше — теле и площе,
больше — шире и драматичнее.
near и far ограничивают то, что рисуется. Объекты ближе near и дальше far отсекаются.
Близко расположенные поверхности начинают мерцать, когда буферу глубины не хватает точности. Если
такое видите, поднимайте near прежде, чем опускать far: на точность near влияет гораздо
сильнее.
Настройки fly
Режим fly движется по клавишам, и клавиши настраиваются — в том числе можно следовать одной из
именованных раскладок проекта вместо прямого указания клавиш. Скорость и множитель ускорения
(по умолчанию зажатый Shift) задают темп.
Дополнительные виды
Дополнительный вид рендерит второй проход с камеры поверх основного. Так делаются миникарта, зеркало заднего вида или монитор наблюдения.
Повесьте его на объект, у которого уже есть камера, и выберите, куда он идёт:
| Цель | Рендерит в |
|---|---|
screen | прямоугольник канваса — позиция и размер в долях экрана |
texture | закадровое изображение, которое потом может показать материал |
Цель texture — самая интересная: отрендерьте вид камеры в текстуру, положите её на объект-экран
в сцене — и получите работающий монитор, показывающий другую часть мира.
Дополнительные виды рисуются после основного прохода, в заданном вами порядке.
Два монитора означают, что сцена рисуется трижды. Они того стоят там, где важны, и их стоит выключать там, где нет.
Какая камера активна
Сцена рендерится через одну камеру за раз. Скрипт может спросить, какая, и переключить её:
ctx.camera.entity();
ctx.camera.setActive(securityCam);
ctx.camera.pose();
Источник правды — всегда transform камеры: пишите в него, чтобы её подвинуть. Учтите, что в
orbit и firstPerson поворотом владеет управление, поэтому записанный вами поворот будет
перезаписан; позиция уважается. См. API ctx.
А если камерой управляют игровые контролы, собственный режим управления этой камеры игнорируется — иначе они дрались бы каждый кадр.
Дальше: Ресурсы — модели, изображения и звуки.