В библиотеке Oimo.js объекты
JointConfig служат основой для настройки соединений
(joints) между телами физического мира. Они определяют поведение
соединения, его ограничения и физические свойства, обеспечивая контроль
над движением и взаимодействием связанных тел. JointConfig
не создаёт сам joint, а задаёт параметры, которые затем используются при
создании конкретных типов соединений: DistanceJoint,
HingeJoint, SliderJoint и других.
JointConfig1. body1, body2 Определяют два объекта
(RigidBody), которые будут соединены. Эти свойства
обязательны для большинства типов соединений. Если одно из тел не
указано, соединение не сможет корректно функционировать.
let config = new OIMO.JointConfig();
config.body1 = bodyA;
config.body2 = bodyB;
2. localAnchor1, localAnchor2 Задают точки привязки соединения относительно локальной системы координат каждого тела.
localAnchor1 — точка на body1.localAnchor2 — точка на body2.Эти точки позволяют точно управлять расположением соединения, обеспечивая реалистичное движение при вращении или смещении тел.
config.localAnchor1.set(0, 1, 0);
config.localAnchor2.set(0, -1, 0);
3. collision Булево свойство, определяющее, будут ли соединённые тела сталкиваться друг с другом.
true — столкновения разрешены.false — тела игнорируют друг друга.config.collision = false;
4. maxForce и maxTorque Эти параметры ограничивают силу и момент, которые joint может приложить к телам. Они критичны для стабилизации сложных конструкций.
maxForce — максимальная линейная сила.maxTorque — максимальный вращающий момент.config.maxForce = 1e6;
config.maxTorque = 1e6;
5. spring Для соединений с упругостью используется
объект Spring, который задаёт жёсткость и демпфирование.
Параметры:
stiffness — жёсткость пружины.damping — коэффициент демпфирования, предотвращающий
колебания.config.spring = new OIMO.Spring();
config.spring.stiffness = 50;
config.spring.damping = 0.5;
6. referenceFrame Определяет систему координат для
соединения. По умолчанию joint работает в локальной системе первого тела
(body1). Настройка referenceFrame позволяет использовать
глобальные координаты или локальные координаты второго тела. Это важно
для сложных механических систем, где точность ориентации критична.
DistanceJoint Соединяет два тела фиксированным расстоянием.
let distanceConfig = new OIMO.DistanceJointConfig();
distanceConfig.body1 = bodyA;
distanceConfig.body2 = bodyB;
distanceConfig.localAnchor1.set(0, 0.5, 0);
distanceConfig.localAnchor2.set(0, -0.5, 0);
distanceConfig.maxForce = 1e5;
let distanceJoint = new OIMO.DistanceJoint(distanceConfig);
HingeJoint Позволяет телам вращаться вокруг общей оси, ограничивая остальные степени свободы.
let hingeConfig = new OIMO.HingeJointConfig();
hingeConfig.body1 = bodyA;
hingeConfig.body2 = bodyB;
hingeConfig.localAnchor1.set(0, 1, 0);
hingeConfig.localAnchor2.set(0, -1, 0);
hingeConfig.axis1.set(0, 1, 0);
hingeConfig.axis2.set(0, 1, 0);
let hingeJoint = new OIMO.HingeJoint(hingeConfig);
SliderJoint Позволяет телам перемещаться вдоль одной
оси. Настройка JointConfig критична для корректного
направления движения и ограничения сил.
let sliderConfig = new OIMO.SliderJointConfig();
sliderConfig.body1 = bodyA;
sliderConfig.body2 = bodyB;
sliderConfig.localAnchor1.set(0, 0, 0);
sliderConfig.localAnchor2.set(0, 0, 0);
sliderConfig.axis1.set(1, 0, 0);
sliderConfig.maxForce = 1e4;
let sliderJoint = new OIMO.SliderJoint(sliderConfig);
localAnchor для точного контроля
положения соединения.maxForce и maxTorque, чтобы
избежать нереалистичных движений при столкновениях.spring и damping для создания
мягких, упругих соединений в механизмах типа подвесок или канатов.collision в конструкциях с
множественными соединениями, чтобы избежать самоконфликтов.JointConfig в Oimo.js — это универсальный инструмент,
позволяющий точно настраивать физическое поведение соединений,
обеспечивая стабильность и реализм симуляции. Его правильное
использование критично для создания сложных механических систем, роботов
и интерактивных физически корректных сцен.