В Ammo.js физика столкновений и взаимодействия объектов задаётся
через параметры трения (friction) и
коэффициента отскока (restitution). Эти свойства
определяют, как объекты ведут себя при контакте: скользят, прилипают,
отскакивают или тормозят. Управление ими осуществляется через методы
setFriction() и setRestitution() объектов типа
btCollisionObject или его наследников, таких как
btRigidBody.
Метод setFriction(value) задаёт коэффициент трения
поверхности объекта.
rigidBody.setFriction(value);
Параметр value — число с плавающей
точкой, обычно в диапазоне 0–1, где:
0 — объект полностью скользкий, трения нет;1 — высокое трение, объект почти не скользит;Применение: Трение влияет на удержание объекта на наклонной плоскости, сопротивление скольжению при столкновении и динамику движения тел по поверхностям с разной шероховатостью.
Пример:
const shape = new Ammo.btBoxShape(new Ammo.btVector3(1, 1, 1));
const mass = 1;
const localInertia = new Ammo.btVector3(0, 0, 0);
shape.calculateLocalInertia(mass, localInertia);
const motionState = new Ammo.btDefaultMotionState();
const rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia);
const rigidBody = new Ammo.btRigidBody(rbInfo);
rigidBody.setFriction(0.5); // среднее трение
Особенности взаимодействия:
Метод setRestitution(value) задаёт коэффициент
упругости объекта, определяющий, насколько сильно он
отскакивает после столкновения.
rigidBody.setRestitution(value);
Параметр value — число с плавающей
точкой:
0 — абсолютно неупругий объект (полное поглощение
энергии при столкновении);1 — полностью упругий объект (энергия сохраняется,
объект отскакивает без потерь);Применение: Отскок используется при моделировании мячей, упругих поверхностей, столкновений с жесткими стенами. Высокие значения делают сцены более «живыми» и динамичными, низкие — более реалистичными для плотных материалов.
Пример:
rigidBody.setRestitution(0.8); // сильный отскок
Особенности взаимодействия:
Совместное использование:
Динамическая корректировка:
setFriction() и setRestitution()
можно вызывать в процессе симуляции для изменения физики объекта на
лету.Тестирование и балансировка:
Взаимодействие с другими настройками:
collisionFlags) и шаг
симуляции (timeStep) влияют на итоговое поведение трения и
отскока. Высокая масса при низком трении может привести к чрезмерному
скольжению.| Трение | Отскок | Поведение объекта |
|---|---|---|
| 0.0 | 1.0 | Скользит и сильно отскакивает |
| 0.5 | 0.5 | Умеренное скольжение и отскок |
| 1.0 | 0.0 | Почти не скользит, отскок минимальный |
| 0.2 | 0.8 | Легко скользит, но сильно отскакивает |
Эти сочетания позволяют тонко настраивать физическое поведение для игровых объектов, имитации реальных материалов или научных симуляций.
При работе с Ammo.js важно помнить, что трение и отскок применяются на уровне RigidBody. Для сложных сцен с несколькими объектами или составными телами можно:
btCollisionShape) с индивидуальными свойствами.setDamping() для контроля затухания
движения, что вместе с трением и отскоком создаёт более реалистичную
динамику.Эффективное использование setFriction() и
setRestitution() позволяет достичь высокого уровня контроля
над физическим поведением объектов, делая симуляции Ammo.js более
выразительными и предсказуемыми.