В Cannon.js трение является ключевым параметром при моделировании физических взаимодействий между объектами. Оно определяет сопротивление скольжению тел друг относительно друга и влияет на реалистичность поведения объектов в сцене. Система трения в Cannon.js делится на два основных типа: статическое трение и динамическое трение.
Статическое трение отвечает за сопротивление началу движения объекта. Оно действует, когда объект находится в состоянии покоя относительно поверхности, с которой взаимодействует.
Определение в Cannon.js: Статическое трение
задаётся через свойство material.friction и обычно
применяется к контактам между двумя телами с различными
материалами.
Использование материала:
const materialA = new CANNON.Material("materialA");
const materialB = new CANNON.Material("materialB");
const contactMaterial = new CANNON.ContactMaterial(materialA, materialB, {
friction: 0.5, // коэффициент трения
restitution: 0.3
});
world.addContactMaterial(contactMaterial);
Здесь friction: 0.5 определяет силу, препятствующую
началу скольжения. Чем выше значение, тем больше усилий нужно для
запуска движения.
Особенности статического трения:
Динамическое (или кинетическое) трение проявляется, когда объект уже находится в движении относительно поверхности.
Применение в Cannon.js: Cannon.js не разделяет
напрямую динамическое и статическое трение в отдельных свойствах. Вместо
этого динамическое трение вычисляется исходя из свойства
friction материала и относительной скорости
объектов.
Механизм расчёта: Динамическая сила трения
вычисляется как: [ F_{трения} = N] где μ — коэффициент
трения (material.friction), а N — нормальная
сила, действующая на объект. Сила направлена против направления
относительного движения.
Особенности динамического трения:
В Cannon.js трение всегда определяется на уровне материалов, а не конкретного тела. Это позволяет гибко комбинировать разные типы поверхностей:
restitution).const woodMaterial = new CANNON.Material("wood");
const metalMaterial = new CANNON.Material("metal");
const woodOnMetal = new CANNON.ContactMaterial(woodMaterial, metalMaterial, {
friction: 0.7,
restitution: 0.2
});
world.addContactMaterial(woodOnMetal);
world.step(dt), так как
большие dt могут искажать динамическое трение.Использование правильных коэффициентов трения является ключевым аспектом для точной симуляции физических взаимодействий в Cannon.js, обеспечивая контроль как над началом движения, так и над поведением объектов в движении.