В Oimo.js шаровой сустав (SphericalJoint)
используется для соединения двух тел с возможностью свободного вращения
вокруг точки соединения, сохраняя при этом фиксированное расстояние
между ними. Этот тип соединения часто применяют для имитации
человеческих суставов, подвесок или сложных механических систем.
Шаровой сустав создается с помощью конструктора
OIMO.SphericalJoint, который принимает объект с параметрами
соединения:
let joint = new OIMO.SphericalJoint({
body1: rigidBodyA,
body2: rigidBodyB,
position: new OIMO.Vec3(0, 5, 0),
collision: false
});
world.addJoint(joint);
Основные параметры:
body1 и body2 — тела, которые будут
соединены суставом.position — точка соединения в мировых координатах. Она
задает центр вращения для обоих тел.collision — логический флаг, разрешающий или
запрещающий столкновения между соединенными телами. По умолчанию
false.anchorPoint Определяет положение точки соединения относительно первого тела. Может быть изменено после создания сустава.
localAnchorPoint Локальные координаты точки соединения относительно каждого тела. Позволяет более точно контролировать смещение суставов.
limit Ограничивает вращение тела вокруг сустава.
В Oimo.js это задается с помощью диапазона углов (например,
min и max для каждой оси).
spring Добавляет эластичность к суставу,
позволяя телам возвращаться в исходное положение. Настраивается
параметрами stiffness (жесткость) и damping
(демпфирование).
setAnchor(pos) — задает новую мировую точку
соединения.getAnchor() — возвращает текущую мировую точку
соединения.setLimit(minVec3, maxVec3) — задает ограничения
вращения.setSpring(stiffness, damping) — добавляет упругость
суставу.Пример установки пределов вращения:
joint.setLimit(
new OIMO.Vec3(-Math.PI/4, -Math.PI/4, -Math.PI/4),
new OIMO.Vec3(Math.PI/4, Math.PI/4, Math.PI/4)
);
Шаровой сустав идеально подходит для:
Для создания сложной структуры с несколькими суставами необходимо
точно рассчитывать положение anchorPoint для каждого
соединения, чтобы избежать нестабильности симуляции.
collision: false улучшает производительность и
предотвращает застревание суставов.spring с умеренным damping
позволяет избежать «дрожания» тел при симуляции.SphericalJoint часто комбинируют с
DistanceJoint или HingeJoint для ограничения
степени свободы. Например, подвеска может иметь шаровой сустав для
свободного вращения и DistanceJoint для сохранения длины
амортизатора. Такой подход позволяет создать реалистичное движение без
чрезмерного вычислительного нагружения.
Шаровой сустав реализован как точка с тремя степенями свободы вращения. Симулятор Oimo.js использует матрицу Якоби для расчета сил и моментов, обеспечивая стабильность при взаимодействии с гравитацией, столкновениями и другими суставами.
Хотите, я подготовлю подробный пример сложной механической цепи с несколькими шаровыми суставами, который можно сразу запускать в Oimo.js?