В Oimo.js объекты физического мира представлены
телами (RigidBody), которые обладают массой, инерцией и
другими физическими свойствами. Для управления их движением используются
силы, импульсы и крутящие моменты. Различие между этими понятиями важно:
сила изменяет скорость тела во времени, импульс изменяет мгновенно, а
крутящий момент влияет на вращение.
applyForce)Сила в Oimo.js прикладывается к телу через метод
applyForce(forceVec3, relativePoint). Параметры:
forceVec3 – вектор силы в мировых координатах.relativePoint – точка приложения силы относительно
центра масс тела. Если не указана, сила действует в центре масс.Пример применения силы к телу:
const force = new OIMO.Vec3(0, 50, 0); // Сила вверх
const point = new OIMO.Vec3(1, 0, 0); // Точка приложения смещена вправо
rigidBody.applyForce(force, point);
Сила, приложенная вне центра масс, вызывает не только линейное ускорение, но и вращение тела.
applyImpulse)Импульс мгновенно изменяет скорость тела, что особенно полезно для столкновений или резких толчков. Метод:
rigidBody.applyImpulse(impulseVec3, relativePoint);
impulseVec3 – вектор импульса (масса × изменение
скорости).relativePoint – точка приложения относительно центра
масс.Применение импульса эффективно для имитации ударов и стартового ускорения тел.
const impulse = new OIMO.Vec3(0, 10, 0);
rigidBody.applyImpulse(impulse, new OIMO.Vec3(0, 0, 0));
applyTorque)Крутящий момент изменяет угловую скорость тела, воздействуя на его вращение. Используется для вращения без приложения силы к точкам вне центра масс.
const torque = new OIMO.Vec3(0, 5, 0); // Вращение вокруг оси Y
rigidBody.applyTorque(torque);
Крутящий момент особенно удобен для симуляции моторов, вентиляторов или вращающихся объектов.
Выбор точки приложения критически важен для точного физического поведения:
В Oimo.js координаты точки могут быть заданы в локальной системе тела или мировой системе. Для конверсии используют методы:
const worldPoint = rigidBody.getWorldPoint(localPoint);
const localPoint = rigidBody.getLocalPoint(worldPoint);
Если к телу одновременно приложено несколько сил:
Пример сложения сил и моментов:
const force1 = new OIMO.Vec3(10, 0, 0);
const force2 = new OIMO.Vec3(0, 20, 0);
rigidBody.applyForce(force1, new OIMO.Vec3(1, 0, 0));
rigidBody.applyForce(force2, new OIMO.Vec3(-1, 0, 0));
В результате тело будет двигаться по диагонали и вращаться из-за смещённой точки приложения.
Согласно закону Ньютона:
[ F = m a a = ]
Импульс:
[ v = J ]
Таким образом:
Масса тела напрямую влияет на чувствительность к этим воздействиям.
Сбалансированное использование этих инструментов обеспечивает реалистичное физическое поведение в симуляциях на основе Oimo.js.