В физическом движке Oimo.js объекты сцены классифицируются по типу тел, что определяет их поведение при взаимодействии с силами, столкновениями и другими объектами. Основное различие проводится по способу движения и взаимодействия с физическим миром.
Динамические тела — это объекты, полностью подчиняющиеся законам физики. Они реагируют на силы, импульсы, столкновения и гравитацию.
Основные характеристики:
mass.applyForce) и импульсы (applyImpulse), что
изменяет его скорость и направление движения.Пример создания динамического тела:
let box = world.add({
type: 'box',
size: [1, 1, 1],
pos: [0, 10, 0],
move: true, // тело динамическое
mass: 2
});
Ключевой момент: свойство move: true делает тело
динамическим, и движок автоматически применяет к нему физические
законы.
Статические тела остаются неподвижными вне зависимости от сил и столкновений. Они создают «окружение» для динамических объектов.
Основные характеристики:
Пример создания статического тела:
let ground = world.add({
type: 'box',
size: [50, 1, 50],
pos: [0, 0, 0],
move: false // тело статическое
});
В Oimo.js статическое тело обозначается move: false. Оно
идеально подходит для создания сцены, где динамические объекты могут
взаимодействовать с окружающей средой.
Кинематические тела занимают промежуточное положение между динамическими и статическими. Они могут двигаться по заданной траектории, но не подчиняются физическим силам, и при столкновениях не изменяют своего положения.
Основные характеристики:
setPosition, setLinearVelocity).Пример создания кинематического тела:
let movingPlatform = world.add({
type: 'box',
size: [5, 1, 5],
pos: [0, 5, 0],
move: true,
noSleep: true, // обязательно для кинематики
mass: 0 // масса игнорируется
});
// задаём движение платформы вручную
movingPlatform.setLinearVelocity({x: 1, y: 0, z: 0});
Особое внимание: кинематическое тело требует явного управления скоростью или положением. Если не обновлять их каждый кадр, объект останется на месте.
| Характеристика | Динамическое тело | Статическое тело | Кинематическое тело |
|---|---|---|---|
| Подвержено гравитации | Да | Нет | Нет |
| Реакция на силы | Да | Нет | Нет |
| Реакция на столкновения | Да | Нет | Нет (только влияет на динамику) |
| Управление положением вручную | Не требуется | Не требуется | Обязательно |
| Масса | Да | Нет | Игнорируется |
Классификация тел в Oimo.js — ключевой инструмент для эффективного моделирования физики. Правильное понимание различий между динамическими, статическими и кинематическими телами позволяет строить реалистичные сцены с управляемой производительностью и предсказуемым поведением объектов.