В физическом движке Oimo.js материал является фундаментальной концепцией, определяющей физические свойства объектов при взаимодействии с другими телами и силами среды. Материал задаёт, как объект реагирует на столкновения, трение и вращение, а также влияет на поведение мягких и жёстких тел в симуляции.
В Oimo.js каждый объект может быть связан с материалом, который включает в себя несколько ключевых параметров:
Плотность (density) Плотность материала определяет массу тела через объём. Формула массы: [ mass = density volume] При изменении плотности объект становится тяжелее или легче, что напрямую влияет на его инерцию и устойчивость при столкновениях.
Коэффициент трения (friction) Фрикция отвечает за сопротивление скольжению между телами. В Oimo.js значение трения задаётся числом от 0 до 1:
Коэффициент упругости (restitution) Упругость определяет, насколько объект отскакивает после столкновения. Значение также варьируется от 0 до 1:
Линейное и угловое демпфирование (linearDamping, angularDamping) Эти свойства контролируют затухание движения тела во времени:
В Oimo.js материалы создаются с помощью конструктора
OIMO.Material или при создании коллайдера. Пример:
let material = new OIMO.Material({
density: 2.0,
friction: 0.5,
restitution: 0.3,
linearDamping: 0.01,
angularDamping: 0.05
});
После создания материал можно присвоить телу через его
shape:
let box = world.add({
type: "box",
size: [1, 1, 1],
pos: [0, 5, 0],
material: material
});
Таким образом, один и тот же материал можно применять к нескольким телам, обеспечивая одинаковые физические свойства.
Oimo.js использует алгоритмы столкновений, учитывающие трение и упругость материала. При контакте двух объектов движок комбинирует их свойства следующим образом:
Эти комбинации определяют, как объекты будут отскакивать и скользить друг относительно друга.
Жёсткие тела (Rigid Bodies) Материал управляет реакцией на силы, трение о другие тела и упругость при столкновениях. Тщательная настройка плотности и трения критична для стабильности симуляции.
Мягкие тела (Soft Bodies) Хотя Oimo.js ограниченно поддерживает мягкие тела, материал влияет на сопротивление деформации и внутреннее трение, задавая реалистичное поведение при растяжении и сжатии.
Статические объекты Для объектов, неподвижных в пространстве, материал задаёт только трение и упругость при контакте с динамическими телами. Плотность в данном случае не влияет на симуляцию, так как масса статического тела бесконечна.
Материал тесно связан с массой, инерцией и силами на объект. Например, высокая плотность при низком демпфировании может привести к нестабильным столкновениям. Правильная настройка всех параметров обеспечивает реалистичное движение без «проваливания» или «летания» тел в пространстве.
Материалы в Oimo.js формируют основу поведения объектов, определяя не только их физические характеристики, но и стабильность всей симуляции. Их правильная конфигурация — ключ к реалистичному и управляемому моделированию.