External Publication
Visit Post

Jolt Vehicle Tuning Guide

jMonkeyEngine Hub May 3, 2026
Source

According to the documentation, the units of lateral slip are radians, not degrees:

mLateralSlip is declared here:

github.com/jrouwe/JoltPhysics

Jolt/Physics/Vehicle/WheeledVehicleController.h

a80c9dbcb

    52. 	/// Apply a torque (N m) to the wheel for a particular delta time


    53. 	void						ApplyTorque(float inTorque, float inDeltaTime)


    54. 	{


    55. 		mAngularVelocity += inTorque * inDeltaTime / GetSettings()->mInertia;


    56. 	}


    57.

    58. 	/// Update the wheel rotation based on the current angular velocity


    59. 	void						Update(uint inWheelIndex, float inDeltaTime, const VehicleConstraint &inConstraint);


    60.

    61. 	float						mLongitudinalSlip = 0.0f;					///< Velocity difference between ground and wheel relative to ground velocity


    62. 	float						mLateralSlip = 0.0f;						///< Angular difference (in radians) between ground and wheel relative to ground velocity


    63. 	float						mCombinedLongitudinalFriction = 0.0f;		///< Combined friction coefficient in longitudinal direction (combines terrain and tires)


    64. 	float						mCombinedLateralFriction = 0.0f;			///< Combined friction coefficient in lateral direction (combines terrain and tires)


    65. 	float						mBrakeImpulse = 0.0f;						///< Amount of impulse that the brakes can apply to the floor (excluding friction)


    66. };


    67.

    68. /// Settings of a vehicle with regular wheels


    69. ///


    70. /// The properties in this controller are largely based on "Car Physics for Games" by Marco Monster.


    71. /// See: https://www.asawicki.info/Mirror/Car%20Physics%20for%20Games/Car%20Physics%20for%20Games.html


    72. class JPH_EXPORT WheeledVehicleControllerSettings : public VehicleControllerSettings

and passed to the max-impulse callback here:

github.com/jrouwe/JoltPhysics

Jolt/Physics/Vehicle/WheeledVehicleController.cpp

a80c9dbcb

    672. 			// Calculate max impulse that we can apply on the ground


    673. 			float max_longitudinal_friction_impulse;


    674. 			mTireMaxImpulseCallback(wheel_index,


    675. 				max_longitudinal_friction_impulse, max_lateral_friction_impulse[wheel_index], w->GetSuspensionLambda(),


    676. 				w->mCombinedLongitudinalFriction, w->mCombinedLateralFriction, w->mLongitudinalSlip, w->mLateralSlip, inDeltaTime);


    677.

Discussion in the ATmosphere

Loading comments...