Цилиндрический сустав в библиотеке Oimo.js представляет собой комбинацию поворотного и поступательного соединения, позволяя объекту вращаться вокруг одной оси и одновременно перемещаться вдоль этой же оси. Он используется для моделирования реальных механизмов, таких как поршни, тележки на рельсах или шестерни с осевым ходом.
RigidBody,
которые соединяются суставом.Для создания цилиндрического сустава используется конструктор:
let joint = new OIMO.CylinderJoint({
body1: box1,
body2: box2,
localAnchor1: new OIMO.Vec3(0, 1, 0),
localAnchor2: new OIMO.Vec3(0, -1, 0),
localAxis1: new OIMO.Vec3(0, 1, 0),
localAxis2: new OIMO.Vec3(0, 1, 0),
allowRotation: true,
allowTranslation: true,
minTranslation: 0,
maxTranslation: 5
});
world.addJoint(joint);
Если необходимо запретить вращение или движение вдоль оси,
устанавливаются соответствующие флаги allowRotation и
allowTranslation в false.
Цилиндрический сустав позволяет точно контролировать диапазон перемещения и вращения:
Пример ограничения перемещения:
joint.setLimits({
minTranslation: 0,
maxTranslation: 3
});
Пример ограничения вращения:
joint.setRotationLimits({
minRotation: -Math.PI / 4,
maxRotation: Math.PI / 4
});
Моторизация позволяет автоматизировать движение:
Пример включения мотора:
joint.enableMotor(true);
joint.setMotorSpeed(2); // скорость вращения
joint.setMotorForce(10); // сила мотора
Для линейного мотора:
joint.enableTranslationMotor(true);
joint.setTranslationMotorSpeed(1); // скорость вдоль оси
joint.setTranslationMotorForce(20); // максимальная сила
Выравнивание осей Для корректной работы цилиндрического сустава важно, чтобы локальные оси на обоих телах совпадали по направлению. Несовпадение приведет к нестабильной физике.
Баланс ограничения и силы мотора Если мотор слишком сильный, а пределы движения жестко установлены, сустав может «дребезжать» или прыгать, особенно при больших массах тел.
Использование в цепочках механизмов CylinderJoint часто применяют вместе с другими суставами (hinge, slider), создавая сложные кинематические цепочки.
Оптимизация производительности Суставы, допускающие вращение и движение одновременно, создают дополнительную нагрузку на физический движок. Если одно из движений не требуется, его стоит отключать.
Для отладки цилиндрического сустава можно визуально отображать ось и пределы движения:
const start = joint.getPosition();
const end = joint.getPosition().add(joint.getAxis().scale(joint.maxTranslation));
drawLine(start, end, 0xff0000);
Это позволяет контролировать фактическое расположение суставов и предотвращает неожиданные физические артефакты.
CylinderJoint — универсальный инструмент для моделирования комбинированного движения в Oimo.js. Он подходит для механизмов с вращением и поступательным движением по одной оси, позволяет точно настраивать ограничения, скорости и силы, а также интегрируется с другими типами суставов для создания сложных систем. Такой сустав является ключевым элементом при проектировании реалистичной физики в 3D-сценах на JavaScript.