Библиотека Oimo.js предоставляет полноценный движок физики для симуляции твердого тела, сталкивающихся объектов и мягких взаимодействий. В основе организации кода лежит пространство имён OimoPhysics, внутри которого определены все ключевые классы, структуры данных и вспомогательные функции. Правильное понимание структуры этого пространства имён позволяет эффективно использовать библиотеку в проектах на JavaScript.
OimoPhysics выступает контейнером для всех компонентов библиотеки. Его назначение — избежать глобального загрязнения пространства имён и обеспечить модульность кода. Все основные объекты движка находятся именно здесь, включая:
Использование пространства имён позволяет вызывать классы и функции через явную цепочку, например:
const world = new OimoPhysics.World();
const boxShape = new OimoPhysics.BoxGeometry(1, 1, 1);
Такой подход делает код читаемым и позволяет избегать конфликтов имен при интеграции нескольких библиотек.
Класс World является ядром симуляции. Он управляет списком всех тел, форм и джойнтов, рассчитывает физические взаимодействия и обновляет позиции объектов в пространстве. Основные методы класса:
deltaTime.Конструктор World позволяет задавать параметры глобальной физики, такие как сила гравитации:
const world = new OimoPhysics.World({
gravity: [0, -9.81, 0],
timestep: 1 / 60,
iterations: 8
});
RigidBody описывает физическое тело с массой, инерцией и взаимодействием с другими объектами. Основные свойства и методы:
Примеры создания тела и добавления формы:
const body = new OimoPhysics.RigidBody({
type: 'dynamic',
mass: 2,
position: [0, 5, 0]
});
body.addShape(new OimoPhysics.BoxGeometry(1, 1, 1));
world.addRigidBody(body);
Типы тел могут быть:
Классические формы для тела включают:
Каждая форма имеет методы для вычисления объёма, инерции и центра масс, что критично для точной симуляции. Формы привязываются к телам через addShape(), что позволяет создавать сложные составные объекты.
Джойнты обеспечивают ограничения между телами. Основные типы:
Конструктор джойнта принимает два тела и объект параметров:
const joint = new OimoPhysics.HingeJoint(bodyA, bodyB, {
anchor: [0, 1, 0],
axis: [0, 0, 1],
lowerLimit: -Math.PI / 4,
upperLimit: Math.PI / 4
});
world.addJoint(joint);
Джойнты позволяют моделировать механизмы, двери, рычажные системы и цепные соединения.
Все перечисленные классы и структуры экспортируются через пространство имён OimoPhysics, что обеспечивает удобство подключения:
import * as OimoPhysics from 'oimo';
Либо при использовании глобальной сборки через
<script> все классы доступны через
window.OimoPhysics.
Структурированная архитектура библиотеки делает возможным комбинирование форм, тел и джойнтов для создания сложных физических сцен с минимальными усилиями. Такой подход обеспечивает предсказуемость поведения объектов и легкость масштабирования симуляций.