Крутящий момент (torque) в физическом движке Ammo.js используется для
создания вращательного движения объектов. В отличие от силы, которая
действует на центр масс и вызывает линейное ускорение, крутящий момент
воздействует на ориентацию объекта, вызывая вращение вокруг одной или
нескольких осей. Ammo.js предоставляет два основных метода для работы с
крутящим моментом: applyTorque и
applyTorqueImpulse.
applyTorque применяется для установки
постоянного крутящего момента на объект, который будет влиять на него на
каждом шаге симуляции.applyTorqueImpulse предназначен для
мгновенного изменения угловой скорости объекта, аналогично тому, как
импульс силы мгновенно меняет линейную скорость.Метод applyTorque используется для
постепенного вращения объекта в симуляции. Синтаксис следующий:
rigidBody.applyTorque(new Ammo.btVector3(x, y, z));
Где x, y, z — компоненты
вектора крутящего момента в локальных единицах сцены. Ключевые моменты
использования:
rigidBody.getInvInertiaTensorWorld(). Чем больше инерция,
тем медленнее объект реагирует на одинаковый момент.Пример применения крутящего момента для вращения куба вокруг оси Y:
let torque = new Ammo.btVector3(0, 10, 0);
rigidBody.applyTorque(torque);
Этот код создаст вращение куба вокруг вертикальной оси, при этом момент будет добавляться каждый шаг симуляции, пока не будет отменён или не изменится величина.
applyTorqueImpulse используется для
мгновенного изменения угловой скорости объекта. Его синтаксис аналогичен
applyTorque:
rigidBody.applyTorqueImpulse(new Ammo.btVector3(x, y, z));
Особенности метода:
Пример: резкий рывок вращения объекта вокруг оси X:
let torqueImpulse = new Ammo.btVector3(5, 0, 0);
rigidBody.applyTorqueImpulse(torqueImpulse);
После выполнения этого кода объект мгновенно начнет вращаться вокруг оси X, но без постоянного момента.
| Характеристика | applyTorque | applyTorqueImpulse |
|---|---|---|
| Длительность действия | Постоянное воздействие на каждый шаг | Мгновенное, одноразовое |
| Влияние на симуляцию | Постепенное изменение угловой скорости | Мгновенное изменение угловой скорости |
| Используется для | Постоянного вращения, вращения под контролем силы | Всплески, столкновения, резкие рывки |
| Требуемый расчёт инерции | С учетом текущей массы и тензора инерции | С учетом массы и тензора инерции, но импульс учитывает мгновенное изменение |
applyTorqueImpulse для мгновенного начала вращения, а затем
applyTorque для поддержания движения.rigidBody.setDamping(0, 0.1); // первая величина — линейное демпфирование, вторая — угловое
btVector3 каждый шаг может быть
затратным; рекомендуется переиспользовать объекты и изменять их
компоненты.В Ammo.js применение крутящего момента напрямую влияет на шаг симуляции через физический мир:
physicsWorld.stepSimulation(deltaTime, 10);
Где deltaTime — время одного кадра, а второй параметр —
максимальное количество итераций для разрешения столкновений. Крутящий
момент будет учитываться при расчете новых угловых скоростей и
обновлении ориентации объекта через интегратор.
let motorTorque = 5;
hinge.enableAngularMotor(true, 1, motorTorque);
Использование applyTorque и
applyTorqueImpulse позволяет гибко
управлять вращением объектов в Ammo.js. Постоянные моменты создают
плавное вращение, импульсы обеспечивают мгновенные рывки. В сочетании с
демпфированием, ограничениями и расчетом центров масс эти методы
формируют основу сложной динамики вращения в браузерной физике.