Библиотека Oimo.js предназначена для физического моделирования трёхмерных объектов с использованием твёрдого тела. Ключевым аспектом корректного поведения объектов является правильная установка позиции и ориентации при создании тела. Эти параметры определяют исходное положение и поворот объекта в пространстве, что напрямую влияет на физические расчёты столкновений и гравитации.
Каждое тело в Oimo.js создаётся с помощью конструктора
OIMO.Body или через более высокоуровневые объекты
OIMO.RigidBodyConfig. Параметр позиции задаётся в виде
вектора OIMO.Vec3.
let bodyConfig = new OIMO.RigidBodyConfig();
bodyConfig.position = new OIMO.Vec3(0, 10, 0); // координаты X, Y, Z
let body = new OIMO.Body(bodyConfig);
Ключевые моменты:
Ориентация задаётся через кватернионы
(OIMO.Quat) или углы Эйлера,
преобразованные в кватернионы. Кватернионы обеспечивают точное
управление вращением без проблем с «замком Гимбала».
let bodyConfig = new OIMO.RigidBodyConfig();
bodyConfig.position = new OIMO.Vec3(0, 5, 0);
bodyConfig.rotation = new OIMO.Quat().setAxisAngle(new OIMO.Vec3(0, 1, 0), Math.PI / 4); // поворот вокруг оси Y на 45 градусов
let body = new OIMO.Body(bodyConfig);
Особенности работы с ориентацией:
Тела с разной геометрией требуют корректировки позиции:
let boxShape = new OIMO.BoxGeometry(2, 4, 2); // ширина, высота, глубина
let bodyConfig = new OIMO.RigidBodyConfig();
bodyConfig.position = new OIMO.Vec3(0, 2, 0); // половина высоты для размещения на поверхности
bodyConfig.addShape(new OIMO.ShapeConfig(boxShape));
let body = new OIMO.Body(bodyConfig);
Позиция и ориентация напрямую влияют на взаимодействие тела с другими объектами и гравитацией:
Корректная установка позиции и ориентации является фундаментом стабильной симуляции в Oimo.js. Любая ошибка на этом этапе приводит к непредсказуемым столкновениям и неправильной физике, поэтому следует тщательно планировать начальные параметры всех тел.