В WebGL и A-Frame 3D-пространство определяется декартовой
системой координат с тремя осями: X, Y и Z. Каждая точка в
пространстве задаётся вектором (x, y, z):
A-Frame использует правую систему координат, совпадающую с WebGL. Положительная Z-ось направлена «от пользователя внутрь сцены», положительная X — вправо, положительная Y — вверх.
В A-Frame положение объекта задаётся атрибутом position.
Пример:
<a-box position="1 2 -3" color="#4CC3D9"></a-box>
Здесь куб смещён на 1 единицу вправо, 2 единицы вверх и 3 единицы внутрь сцены. Атрибут принимает либо строку с тремя числами, либо объект Jav * aScript:
const box = document.querySelector('a-box');
box.setAttribute('position', {x: 1, y: 2, z: -3});
Ключевой момент: координаты всегда указываются
относительно родительского объекта. Если объект вложен
в <a-entity>, его позиция становится
локальной относительно родителя.
Вращение в A-Frame задаётся атрибутом rotation в
градусах:
<a-box rotation="45 30 0"></a-box>
В JavaScript вращение можно изменять аналогично позиции:
box.setAttribute('rotation', {x: 0, y: 90, z: 0});
Вращение также локальное относительно родителя. Комбинация трансформаций (позиция + вращение + масштаб) задаёт мировую трансформацию объекта.
Атрибут scale определяет размер объекта по осям:
<a-sphere scale="2 1 0.5"></a-sphere>
Единичный масштаб (1 1 1) — исходный размер объекта.
Масштаб, как и позиция и вращение, учитывает родительскую
трансформацию.
В A-Frame для получения мировых координат используют метод
object3D.getWorldPosition():
const worldPos = new THREE.Vector3();
box.object3D.getWorldPosition(worldPos);
console.log(worldPos);
Для движения или расчёта направления часто используют векторы Three.js (A-Frame построен на Three.js). Например, перемещение вперед вдоль локальной оси Z:
const vector = new THREE.Vector3(0, 0, -1);
vector.applyQuaternion(box.object3D.quaternion);
box.object3D.position.add(vector);
applyQuaternion поворачивает вектор с учётом текущей
ориентации объекта.position.add смещает объект в направлении вектора.Камеры в A-Frame имеют собственную систему координат. Позиция и вращение камеры задаются так же, как у любых объектов:
<a-entity camera position="0 1.6 0" rotation="0 180 0"></a-entity>
Камера автоматически создаёт видовую матрицу, которая преобразует мировые координаты объектов в координаты сцены относительно наблюдателя.
В основе преобразований лежат матрицы 4×4:
translation matrix — смещениеrotation matrix — поворотscale matrix — масштабированиеA-Frame скрывает работу с ними, но предоставляет доступ через
object3D.matrix и object3D.matrixWorld. Это
позволяет создавать сложные анимации и иерархические сцены с правильной
композицией трансформаций.
y = 0 как уровень
пола.<a-entity> для управления всей группой.Эти основы системы координат являются фундаментом для построения любых 3D-сцен в A-Frame и обеспечивают точное управление положением и ориентацией объектов в виртуальной среде.