Библиотека Oimo.js предоставляет мощные инструменты для работы с физикой твердых тел в JavaScript. Одним из ключевых элементов управления объектами является возможность ограничения движения и вращения, что позволяет создавать реалистичное поведение объектов или фиксировать их в определенных позициях и ориентациях.
Блокировка осей используется в двух основных аспектах:
Для ограничения перемещения тела используется свойство
linearLock. Оно принимает объект с булевыми значениями для
каждой из осей:
let body = world.add({
type: 'box',
size: [1, 1, 1],
pos: [0, 5, 0],
move: true
});
body.linearLock = { x: true, y: false, z: true };
Пояснение:
x: true — запрещает перемещение по оси X.y: false — разрешает свободное движение по оси Y.z: true — запрещает перемещение по оси Z.При такой конфигурации объект будет двигаться только вверх или вниз по оси Y, игнорируя попытки смещения по горизонтали.
Для ограничения вращения применяется свойство
angularLock, также представляющее объект с булевыми
значениями для каждой оси:
body.angularLock = { x: true, y: false, z: true };
Пояснение:
x: true — объект не может вращаться вокруг оси X.y: false — вращение вокруг оси Y разрешено.z: true — запрещено вращение вокруг оси Z.Это особенно важно при создании объектов, которые должны сохранять вертикальное положение, например, колонны, башни или персонажей с ограниченной подвижностью.
Линейная и угловая блокировка могут использоваться одновременно для более точного контроля:
body.linearLock = { x: true, y: false, z: true };
body.angularLock = { x: true, y: true, z: true };
В этом примере объект свободно перемещается только по оси Y, но полностью зафиксирован по вращению во всех направлениях.
Oimo.js позволяет изменять блокировки тела во время выполнения симуляции, что полезно для анимации или интерактивных сцен:
setTimeout(() => {
body.linearLock.x = false;
body.angularLock.y = false;
}, 2000);
После двух секунд объект сможет двигаться по оси X и вращаться вокруг оси Y, сохраняя прежние ограничения по другим направлениям.
Блокировки осей напрямую влияют на расчёт столкновений и силы, действующие на объект.
Правильная настройка блокировок улучшает стабильность симуляции и снижает вероятность «дрожания» объектов при динамическом взаимодействии.
Статические тела
(type: 'box', 'sphere', 'cylinder') часто используют полные
блокировки вращения и линейного движения для создания стен, пола или
платформ.
Динамические тела (move: true)
применяют частичные блокировки для имитации ограниченной подвижности,
например, маятников, дверей или конвейерных элементов.
joint-объектами, создавая
механизмы и подвески.Эти инструменты позволяют создавать сложные интерактивные сцены с управляемыми физическими объектами, обеспечивая баланс между реализмом и стабильностью симуляции.