Общие параметры JointConfig

В библиотеке Oimo.js объекты JointConfig служат основой для настройки соединений (joints) между телами физического мира. Они определяют поведение соединения, его ограничения и физические свойства, обеспечивая контроль над движением и взаимодействием связанных тел. JointConfig не создаёт сам joint, а задаёт параметры, которые затем используются при создании конкретных типов соединений: DistanceJoint, HingeJoint, SliderJoint и других.

Основные свойства JointConfig

1. 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 позволяет использовать глобальные координаты или локальные координаты второго тела. Это важно для сложных механических систем, где точность ориентации критична.

Создание различных типов соединений с использованием JointConfig

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);

Практические советы по использованию JointConfig

  • Всегда задавать localAnchor для точного контроля положения соединения.
  • Ограничивать maxForce и maxTorque, чтобы избежать нереалистичных движений при столкновениях.
  • Использовать spring и damping для создания мягких, упругих соединений в механизмах типа подвесок или канатов.
  • Проверять свойство collision в конструкциях с множественными соединениями, чтобы избежать самоконфликтов.

JointConfig в Oimo.js — это универсальный инструмент, позволяющий точно настраивать физическое поведение соединений, обеспечивая стабильность и реализм симуляции. Его правильное использование критично для создания сложных механических систем, роботов и интерактивных физически корректных сцен.