В физическом движке Ammo.js управление движением объектов в
пространстве осуществляется через силы, импульсы и моменты. Одним из
самых прямых способов воздействия на тело является применение импульсов,
которые мгновенно изменяют скорость объекта. В Ammo.js для этого
используются методы applyCentralImpulse и
applyImpulse.
Импульс — это интеграл силы по времени, определяющий изменение импульса тела:
[ = , dt]
В контексте движка, применение импульса эквивалентно мгновенному изменению скорости объекта без необходимости учитывать его массу в отдельном расчёте: движок сам учитывает массу тела при вычислении новой скорости.
applyCentralImpulseМетод applyCentralImpulse применяется для мгновенного
толчка тела без создания вращательного момента. Синтаксис выглядит
следующим образом:
rigidBody.applyCentralImpulse(new Ammo.btVector3(x, y, z));
Параметры:
x, y, z — компоненты вектора импульса в локальной или
глобальной системе координат (обычно глобальной).Пример использования:
// Создание вектора импульса
let impulse = new Ammo.btVector3(0, 10, 0);
// Применение к телу
rigidBody.applyCentralImpulse(impulse);
В этом примере тело получает мгновенный толчок вверх. Скорость изменяется пропорционально величине импульса и массе тела: чем меньше масса, тем сильнее ускорение.
Особенности:
applyImpulseМетод applyImpulse более универсален и позволяет
задавать точку приложения импульса. Синтаксис:
rigidBody.applyImpulse(impulseVector, relPosVector);
Параметры:
impulseVector — вектор импульса
(btVector3), определяющий силу воздействия.relPosVector — вектор относительно центра масс тела,
указывающий точку приложения импульса.Пример:
let impulse = new Ammo.btVector3(5, 0, 0);
let relPos = new Ammo.btVector3(0, 1, 0);
rigidBody.applyImpulse(impulse, relPos);
Здесь объект получает импульс по оси X, приложенный выше центра масс. В результате тело начинает двигаться вправо и одновременно вращаться вокруг своей оси, создавая эффект рычага.
Особенности:
applyCentralImpulse и applyImpulse| Метод | Влияние на тело | Применение точки приложения | Эффект вращения |
|---|---|---|---|
applyCentralImpulse |
Только линейная скорость | Центр массы | Нет |
applyImpulse |
Линейная и угловая скорость | Любая точка относительно центра | Возможен |
Выбор метода зависит от задачи:
applyCentralImpulse.applyImpulse.applyImpulse вращение зависит от распределения массы и
формы объекта.applyCentralImpulse, а затем корректировать
вращение через applyImpulse.btVector3 один раз и использовать
повторно, чтобы снизить нагрузку на сборщик мусора.applyCentralImpulse(btVector3(0, jumpForce, 0)).applyImpulse(shotImpulse, relPosFromPivot).btRigidBody с массой > 0).Использование applyCentralImpulse и
applyImpulse обеспечивает тонкий контроль над физическим
поведением объектов в сцене, позволяет создавать реалистичные
столкновения и эффекты отдачи, а также управлять линейной и угловой
динамикой тел в Ammo.js.