As you can see, when I put a steering, my wheels turn but without steering, they don't.
This is my fonction where I modify the position and the rotation of each wheels :
Code: Select all
BOOLEAN PhysicsWorldBullet::DoProcessRayCastVehicle (RayCastVehicle* _rayCastVehicle)
{	
	if (!GetSingleDelegate(_rayCastVehicle) || !_rayCastVehicle->m_vehicle ||  !_rayCastVehicle->m_vehicleRayCaster) return false;
	//Engine Force, Breaking Force and Vehicule Steering Definition
	float	gEngineForce =  _rayCastVehicle->m_engineForce.GetValue();
	float	gBreakingForce = _rayCastVehicle->m_brake.GetValue();
	float	gVehicleSteering = -_rayCastVehicle->m_steering.GetValue();
	//Motor Wheels Definition
	int wheelIndex = 0;
	if(gBreakingForce>0)
	{
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->setBrake(gBreakingForce,wheelIndex);
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->applyEngineForce(0,wheelIndex);
	}
	else
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->applyEngineForce(gEngineForce,wheelIndex);
	wheelIndex = 1;
	if(gBreakingForce>0)
	{
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->setBrake(gBreakingForce,wheelIndex);
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->applyEngineForce(0,wheelIndex);
	}
	else
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->applyEngineForce(gEngineForce,wheelIndex);
	//Steering Front Wheels
	wheelIndex = 0;
	((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->setSteeringValue(gVehicleSteering,wheelIndex);
	wheelIndex = 1;
	((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->setSteeringValue(gVehicleSteering,wheelIndex);
	
	((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->getRigidBody()->activate();
	int i=0;
	float ajustementZ = 0.05;//put the 3D wheels upside the floor
	for ( IteratorEx(it, _rayCastVehicle, Geometry3D); i<((btRaycastVehicle*)_rayCastVehicle->m_vehicle)->getNumWheels(); it++)
	{
		it->Process(this);
		//Position
		((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->updateWheelTransform(i,true);
		btTransform newTransform = ((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->getWheelInfo(i).m_worldTransform;
		MATRIX Local = BtUtils3D::GetTransform(newTransform);//Get the Local matrix of the wheel
		it->SetWorldPosition(Local._41, Local._42, Local._43+ajustementZ);
				//Orientation
				float rotation = (float)((btRaycastVehicle*) _rayCastVehicle->m_vehicle)->getWheelInfo(i).m_rotation;
				//for the front wheels
		if (i<2)
		{
			if (gVehicleSteering<0)
				it->SetOrientation(NULL, -rotation, 0, gVehicleSteering + PI_2);
			else
				it->SetOrientation(NULL, rotation, 0, gVehicleSteering + PI_2);
		}
				//for the back wheels
		else
		{
			if (gVehicleSteering<0)
			{
				if (gEngineForce<0)
					it->SetOrientation(NULL, -rotation, 0, PI_2);
				else
					it->SetOrientation(NULL, rotation, 0, PI_2);
			}
			else
			{
				if (gEngineForce<0)
					it->SetOrientation(NULL, rotation, 0, PI_2);
				else
					it->SetOrientation(NULL, -rotation, 0, PI_2);
			}
		}
		i++;
	}
return true;
}
Code: Select all
        m_engineForce.SetRange(-1000.0, 2000.0, 0.0);//(Min, Max, Init)
	m_brake.SetRange(0.0, 100.0, 0.0);//(Min, Max, Init)
	m_steering.SetRange(-0.3, 0.3, 0.0);//(Min, Max, Init)
	m_wheelDirectionCS.SetValues(0, 0, -1);
	m_wheelAxleCS.SetValues(0, -1, 0);
	m_wheelRadius = 0.31265;//Defaut : 0.5f, Subaru : 0.31265
	m_wheelWidth = 0.215f;//Defaut : 0.4f, Subaru : 0.215f
	m_wheelFriction = 10.5;//1000.0;//2.0;
	m_maxSuspensionTravelCm = 20.0f;//500.0;
	m_suspensionStiffness = 40.0f;//5.8f;//Defaut : 20.0, Subaru : 15.0
	m_suspensionDamping = 2.3f;//0.88;//2.3;
	m_suspensionCompression = 2.4;//0.83;//4.4;
	m_rollInfluence = 0.2f;
	m_suspensionRestLength = 0.1;
	m_connectionHeight = -0.4;//1.2;
	m_chassisLenght = 4.8;//Defaut : 2, Subaru : 4.8
	m_chassisWidth = 2; //Defaut : 1, Subaru : 2
	m_chassisHeight = 1.3;//Defaut : 0.5 , Subaru : 1.5
	m_SpeedKmH = 0;
Code: Select all
it->m_SpeedKmH = ((btRaycastVehicle*)it->m_vehicle)->getCurrentSpeedKmHour();
if(it->m_SpeedKmH.GetValue() < 0) 
{
        it->m_SpeedKmH*=-1;
}
In the video, we see that the color of the raycast change in blue when they are in contact with the ground.
The value m_rotation is increase by m_deltaRotation everytime (in btRaycastVehicle::updateVehicle( btScalar step )), but when there is no steering, m_deltaRotation is really small like "0.0000004" (in radian).
I hope you can help me because I'm totaly blocked for now.
Thank for your help,
Cordialy,
InSomNia.