Примитив a-camera

Примитив a-camera является основным инструментом для создания перспективы и управления точкой обзора в виртуальной сцене. Он определяет позицию, ориентацию и взаимодействие пользователя с 3D-пространством. В отличие от других примитивов, камера не отображается в сцене визуально, но формирует то, что видит пользователь.

Базовая структура

<a-scene>
  <a-camera position="0 1.6 0"></a-camera>
</a-scene>
  • position задаёт местоположение камеры в пространстве сцены. Обычно высота y установлена на 1.6 метра для имитации роста человека.
  • При отсутствии указаний камера по умолчанию находится в центре сцены с направлением вдоль отрицательной оси Z.

Атрибуты камеры

position Определяет координаты камеры в формате x y z. Например, position="0 2 5" поднимает камеру на 2 метра и отодвигает на 5 единиц назад.

rotation Управляет ориентацией камеры в сцене. Формат x y z задаёт повороты вокруг осей:

  • x — наклон вверх/вниз
  • y — поворот вокруг вертикальной оси
  • z — наклон влево/вправо
<a-camera rotation="0 45 0"></a-camera>

look-controls Примитив автоматически включает компонент look-controls, который обеспечивает управление обзором с помощью мыши, тачпада или VR-устройств. Его можно настраивать:

  • enabled — включает или отключает управление.
  • pointerLockEnabled — активация захвата курсора для полного управления мышью.
<a-camera look-controls="pointerLockEnabled: true"></a-camera>

wasd-controls Обеспечивает передвижение камеры с помощью клавиш W, A, S, D. Позволяет реализовать ходьбу и бег в 3D-сцене.

<a-camera wasd-controls="acceleration: 20"></a-camera>
  • acceleration — скорость разгона при удержании клавиши.
  • Можно ограничивать движения по осям, задавая атрибут fly: false для имитации ходьбы по поверхности.

Использование с курсором

Камера может содержать <a-cursor> для взаимодействия с объектами через указатель. Курсор представляет собой точку или кольцо, указывающее направление взаимодействия камеры.

<a-camera>
  <a-cursor color="red"></a-cursor>
</a-camera>
  • Цвет, размер и анимация курсора настраиваются через атрибуты color, fuse, radiusInner, radiusOuter.
  • Атрибут fuse позволяет активировать объекты после удержания курсора на них в течение заданного времени.

Камера для VR и AR

Примитив a-camera автоматически адаптируется под устройства виртуальной и дополненной реальности. Для включения VR достаточно добавить <a-scene vr-mode-ui="enabled: true">. Камера будет управляться контроллерами VR, сохраняя поддержку стандартных веб-интерфейсов.

Примеры сложных настроек

  1. Камера с ограниченной высотой и горизонтальной ориентацией:
<a-camera position="0 1.6 0" rotation="0 90 0" look-controls="enabled: true" wasd-controls="fly: false"></a-camera>
  1. Камера с курсором и активируемыми объектами через Fuse:
<a-camera>
  <a-cursor fuse="true" fuse-timeout="1500" color="green"></a-cursor>
</a-camera>
  1. Камера для VR с ограничением движения и повышенной чувствительностью:
<a-camera wasd-controls="acceleration: 50; fly: false" look-controls="pointerLockEnabled: true"></a-camera>

Важные замечания

  • a-camera всегда должна быть одной в сцене, иначе поведение управления и рендеринга будет непредсказуемым.
  • Для статичных сцен без движения можно использовать <a-entity camera> вместо примитива, чтобы вручную контролировать компоненты.
  • Комбинация look-controls и wasd-controls обеспечивает полное погружение и интерактивность без необходимости сторонних библиотек.

Оптимизация работы камеры

  • Использование position и rotation напрямую уменьшает нагрузку на движок по сравнению с постоянным обновлением через скрипты.

  • В больших сценах рекомендуется ограничивать дальность обзора с помощью camera="far: 100; near: 0.1", чтобы уменьшить количество рендеринга объектов вне поля зрения.

  • Можно использовать parent-entity для группирования камеры с другими объектами (например, светильниками или аудио), что упрощает перемещение и анимацию.

<a-entity position="0 1.6 0">
  <a-camera></a-camera>
  <a-entity light="type: point; intensity: 0.5"></a-entity>
</a-entity>
  • Такой подход позволяет создавать автономные модули камеры для разных сцен или уровней в приложении.