btWheelInfo — это объект, описывающий отдельное колесо в
физическом симуляторе автомобиля, основанном на библиотеке Ammo.js. Он
является частью структуры btRaycastVehicle и отвечает за
управление характеристиками колеса, взаимодействием с поверхностью и
поведением подвески. Понимание всех его параметров критично для точного
моделирования движения автомобиля и реакции на дорожные условия.
btWheelInfo создается через
btWheelInfoConstructionInfo — вспомогательную структуру,
содержащую базовые параметры колеса:
let wheelInfoCI = new Ammo.btWheelInfoConstructionInfo(
suspensionRestLength, // длина подвески в состоянии покоя
chassisBody, // тело шасси (btRigidBody)
wheelDirectionCS0, // направление подвески (btVector3)
wheelAxleCS, // ось колеса (btVector3)
suspensionStiffness, // жесткость подвески
wheelRadius, // радиус колеса
isFrontWheel // булево значение, является ли передним колесом
);
let wheelInfo = new Ammo.btWheelInfo(wheelInfoCI);
Ключевые моменты при инициализации:
suspensionRestLength — определяет
исходное расстояние между шасси и колесом.wheelDirectionCS0 — задает направление
действия силы подвески (обычно вдоль оси Y в локальных координатах
шасси).wheelAxleCS — определяет ось вращения
колеса, обычно перпендикулярную направлению подвески.isFrontWheel — влияет на поворот колес
при управлении автомобилем.btWheelInfo содержит набор свойств, управляющих
динамикой колеса:
m_suspensionStiffness — жесткость
пружины подвески. Большие значения делают подвеску более «твердой»,
маленькие — мягкой.m_wheelsDampingCompression —
демпфирование сжатия подвески, влияет на поглощение ударов при наезде на
неровности.m_wheelsDampingRelaxation —
демпфирование расширения подвески, регулирует возврат колеса в исходное
положение.m_frictionSlip — коэффициент трения
между колесом и поверхностью. Высокие значения увеличивают сцепление,
низкие делают автомобиль скользким.m_rollInfluence — величина влияния
момента инерции на крен автомобиля.Пример настройки:
wheelInfo.set_m_suspensionStiffness(20);
wheelInfo.set_m_wheelsDampingCompression(2.3);
wheelInfo.set_m_wheelsDampingRelaxation(4.5);
wheelInfo.set_m_frictionSlip(1.5);
wheelInfo.set_m_rollInfluence(0.1);
btWheelInfo отслеживает текущее состояние колеса в
процессе симуляции:
m_raycastInfo.m_contactPointWS — точка
контакта колеса с поверхностью в мировых координатах.m_raycastInfo.m_suspensionLength —
текущая длина подвески.m_rotation — угол вращения колеса
вокруг своей оси.m_deltaRotation — изменение угла за
последний шаг симуляции.Эти значения используются для вычисления скорости, анимации вращения и визуального отображения колеса.
m_maxSuspensionTravelCm — максимальный
ход подвески, ограничивает сжатие и разжатие.m_wheelsRadius — радиус колеса,
критично для точного расчета контакта и силы сцепления.m_suspensionRestLength1 — исходная
длина подвески после инициализации.Подвеска определяется через направление и жесткость пружины, но также требует установки демпфирования, чтобы колебания не были слишком резкими:
wheelInfo.set_m_maxSuspensionTravelCm(20);
wheelInfo.set_m_suspensionRestLength1(0.6);
btWheelInfo поддерживает дополнительные флаги:
m_bIsFrontWheel — определяет
управление поворотом.m_skidInfo — коэффициент пробуксовки,
используется для симуляции скольжения.m_suspensionRelativeVelocity —
скорость изменения длины подвески, необходимая для вычисления
демпфирования.Колеса в btRaycastVehicle обновляются каждый физический
шаг с учетом этих параметров. Основные методы, связанные с колесами:
updateWheelTransform() — пересчет позиции и ориентации
колеса после изменения состояния подвески.applyEngineForce(force, wheelIndex) — применение силы
двигателя к конкретному колесу.setBrake(brake, wheelIndex) — торможение колеса.setSteeringValue(steering, wheelIndex) — поворот
передних колес для управления автомобилем.С точки зрения производительности, каждое колесо имеет внутреннюю
структуру m_raycastInfo, которая содержит:
m_hardPointWS — точка крепления колеса к шасси в
мировых координатах.m_contactNormalWS — нормаль поверхности в точке
контакта.m_suspensionLength — текущая длина подвески.m_contactVelocity — скорость движения колеса
относительно точки контакта.Эта структура позволяет рассчитывать силы сцепления и реакции подвески без обращения к рендеру.
Для отображения вращения колеса в 3D-сцене необходимо учитывать:
m_rotation — угол вращения колеса.m_steering — угол поворота относительно оси
автомобиля.m_raycastInfo.m_contactPointWS — координата для
позиционирования колеса на поверхности.Синхронизация физики и графики выполняется на каждом кадре, что обеспечивает реалистичное поведение автомобиля при движении по неровной трассе.
btWheelInfo — центральный элемент точной симуляции колес
автомобиля в Ammo.js. Его параметры позволяют контролировать жесткость
подвески, трение, крен и вращение, обеспечивая реалистичное
взаимодействие с поверхностью и стабильное поведение транспортного
средства.