A-Frame строит виртуальную реальность на основе WebVR и WebXR, предоставляя декларативный способ создания 3D-сцен с использованием HTML-подобного синтаксиса. Основой любой сцены является Scene Graph — иерархическая модель объектов, которая определяет, как сущности сцены взаимодействуют друг с другом и с пользователем.
В A-Frame базовой единицей сцены является
<a-entity>. Любой объект сцены, будь
то камера, свет, геометрическая фигура или пользовательский элемент,
создается как сущность. Сущности могут иметь
компоненты, которые описывают их поведение, внешний вид
и взаимодействие:
geometry) — определяет
форму объекта (box, sphere, plane
и т.д.).material) — управляет
цветом, текстурой, прозрачностью и отражением.position), масштаб
(scale), вращение
(rotation) — ключевые трансформации в
пространстве.animation) — задает
динамическое изменение свойств во времени.Каждый компонент может быть встроенным или пользовательским, что позволяет гибко расширять возможности сцены.
Scene Graph организует сущности в дерево, где каждая сущность может быть родителем для других. Это влияет на положение, ориентацию и поведение дочерних объектов:
<a-entity position="0 1 0">
<a-box color="red" position="0 1 0"></a-box>
<a-sphere color="blue" position="1 0 0"></a-sphere>
</a-entity>
Ключевой элемент сцены — камера
(<a-camera>). Камера может быть
самостоятельной сущностью или вложенной в другие объекты. Это дает
возможность:
Камеры используют компоненты, такие как look-controls и wasd-controls, для управления движением и вращением с клавиатуры и мыши.
Освещение в Scene Graph влияет на все видимые объекты сцены:
Световые сущности могут быть вложены в другие объекты, что позволяет реализовать эффект движущихся источников света.
A-Frame использует компоненты для обработки коллизий, взаимодействия с пользователем и физики. Популярные подходы:
aabb-collider — обнаружение
столкновений по оси.super-hands — для взаимодействия с
объектами через контроллеры VR.dynamic-body и
static-body — физические свойства объектов через
библиотеку Cannon.js.Дочерние сущности наследуют коллайдеры родителя, что позволяет создавать сцены с динамическими объектами и сложной логикой взаимодействия.
Scene Graph упрощает организацию сцены через группировку:
<a-entity id="tree-group" position="0 0 0">
<a-entity geometry="primitive: box" material="color: brown" position="0 0 0.5"></a-entity>
<a-entity geometry="primitive: cone" material="color: green" position="0 1 0"></a-entity>
</a-entity>
Scene Graph напрямую влияет на производительность:
Каждая сущность Scene Graph доступна через DOM и API A-Frame:
const box = document.querySelector('#myBox');
box.setAttribute('position', { x: 1, y: 2, z: 3 });
box.addEventListener('click', () => {
console.log('Box clicked!');
});
A-Frame Scene Graph автоматически интегрируется с WebXR:
Scene Graph является фундаментальной концепцией, которая объединяет все элементы A-Frame в единую, управляемую структуру. Он обеспечивает гибкость, расширяемость и оптимизацию сцен для веб-реальности.