btWheelInfo: параметры отдельного колеса

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. Его параметры позволяют контролировать жесткость подвески, трение, крен и вращение, обеспечивая реалистичное взаимодействие с поверхностью и стабильное поведение транспортного средства.