В библиотеке Three.js центральным строительным блоком для всех объектов сцены является класс Object3D. Он служит базой для таких сущностей, как Mesh, Camera, Light, Group и других. Любой объект, который нужно разместить в 3D-пространстве, наследует свойства и методы Object3D, обеспечивая гибкость и единообразие работы со сценой.
Object3D не рендерится напрямую — он управляет положением, ориентацией, масштабом и иерархией объектов. Основное назначение — объединение объектов в иерархии и предоставление средств трансформации.
Свойство position представляет собой объект Vector3, отвечающий за позицию объекта в мировой системе координат.
Примеры операций с position:
object.position.set(10, 5, -3);
object.position.x += 2;
Свойство rotation хранит ориентацию объекта в виде Euler (углы вращения по осям X, Y, Z). Вращение задаётся в радианах.
object.rotation.y = Math.PI / 2; // Поворот на 90 градусов вокруг оси Y
Свойство quaternion используется для управления ориентацией объекта через кватернионы, что позволяет избегать проблемы “Gimbal Lock”. Кватернионы и Euler синхронизированы, поэтому изменение одного автоматически обновляет другое.
object.quaternion.setFromEuler(new THREE.Euler(Math.PI / 2, 0, 0));
Свойство scale определяет масштаб объекта по осям X, Y, Z с помощью Vector3.
object.scale.set(2, 1, 0.5);
Булевое свойство visible контролирует видимость объекта при рендеринге.
object.visible = false; // Объект скрыт
Свойство parent указывает на родительский объект в иерархии, а children — массив дочерних объектов. Иерархия позволяет создавать сложные структуры, где трансформации родителя автоматически применяются к детям.
parentObject.add(childObject);
childObject.position.set(1, 0, 0);
Свойство up задаёт направление “вверх” для объекта,
используемое при вычислении вращений и некоторых вспомогательных
функций, например, lookAt(). По умолчанию направлено
вдоль оси Y: (0, 1, 0).
object.up.set(0, 0, 1); // Изменение вверх на ось Z
matrix — локальная матрица трансформации, объединяющая позицию, вращение и масштаб. matrixWorld — глобальная матрица, учитывающая иерархию родителей.
object.updateMatrix(); // Обновление локальной матрицы
object.updateMatrixWorld(); // Обновление глобальной матрицы
modelViewMatrix используется рендерером для преобразования объекта в пространство камеры. normalMatrix — 3x3 матрица для корректного преобразования нормалей при освещении.
Перемещают объект вдоль его локальных осей.
object.translateX(5);
Вращение объекта вокруг локальных осей.
object.rotateY(Math.PI / 4);
Направляет объект на указанную точку в мировой системе координат.
object.lookAt(new THREE.Vector3(0, 0, 0));
Позволяют добавлять или удалять дочерние объекты, формируя иерархию.
group.add(mesh1, mesh2);
group.remove(mesh1);
Рекурсивно проходит по объекту и всем его детям, позволяя выполнять операции над всей иерархией.
scene.traverse(obj => {
obj.visible = true;
});
Object3D поддерживает систему родитель-дочерний объект.
const group = new THREE.Group();
group.add(mesh);
group.position.set(10, 0, 0);
Объекты Object3D формируют основу сцен любой сложности:
Использование Object3D обеспечивает гибкость и единообразие работы с любыми элементами 3D-сцены, делая архитектуру кода предсказуемой и удобной для расширения.