Vehicle, Wheels going all over the place
Posted: Thu Jul 05, 2012 4:08 pm
Hi,
I have been trying to get a vehicle working within Cocos3d on IOS.
I have a vehicle that I can move around but the wheels go all over the place.
I thought maybe it is to do with my coordinate getting muddled up but I'm not sure
In cocos 3d.
Forward = Negative Z
Up = Positive Y
Right = Positive X
For my vehicle I have
int rightIndex = 0;
int upIndex = 1;
int forwardIndex = 2;
physicsObject.m_vehicle->setCoordinateSystem(rightIndex, upIndex, forwardIndex);//X,Y,Z
and for my wheels I have
btVector3 wheelDirectionCS0(0,-1,0);
btVector3 wheelAxleCS(-1,0,0);
They are then attached as follows
btVector3 connectionPointCS0(0.88f,connectionHeight,1.6f);
carChassis.m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,carChassis.mTuning,isFrontWheel);
etc
They are all placed correctly but when I turn left or right, they rotate on their side originally, instead of left and right.
and then as i move the vehicle forward as soon as I start to turn they just go all over the place..
I update the rendering of my wheels as follows
btQuaternion btq = object.m_vehicle->getWheelInfo(i).m_worldTransform.getRotation();
btVector3 wPos = object.m_vehicle->getWheelInfo(i).m_worldTransform.getOrigin();
CC3Vector4 quaternion;
quaternion.x = btq.x();
quaternion.y = btq.y();
quaternion.z = btq.z();
quaternion.w = btq.w();
//wheel.quaternion = quaternion;
switch (i) {
case 0:
wheel = object.Wheel1;
break;
case 1:
wheel = object.Wheel2;
break;
case 2:
wheel = object.Wheel3;
break;
case 3:
wheel = object.Wheel4;
break;
default:
break;
}
wheel.location = CC3VectorMake(wPos.getX(), wPos.getY(), wPos.getZ());
wheel.quaternion = quaternion;
Any pointers in the right direction would be hand,
Many thanks
Duncan.
I have been trying to get a vehicle working within Cocos3d on IOS.
I have a vehicle that I can move around but the wheels go all over the place.
I thought maybe it is to do with my coordinate getting muddled up but I'm not sure
In cocos 3d.
Forward = Negative Z
Up = Positive Y
Right = Positive X
For my vehicle I have
int rightIndex = 0;
int upIndex = 1;
int forwardIndex = 2;
physicsObject.m_vehicle->setCoordinateSystem(rightIndex, upIndex, forwardIndex);//X,Y,Z
and for my wheels I have
btVector3 wheelDirectionCS0(0,-1,0);
btVector3 wheelAxleCS(-1,0,0);
They are then attached as follows
btVector3 connectionPointCS0(0.88f,connectionHeight,1.6f);
carChassis.m_vehicle->addWheel(connectionPointCS0,wheelDirectionCS0,wheelAxleCS,suspensionRestLength,wheelRadius,carChassis.mTuning,isFrontWheel);
etc
They are all placed correctly but when I turn left or right, they rotate on their side originally, instead of left and right.
and then as i move the vehicle forward as soon as I start to turn they just go all over the place..
I update the rendering of my wheels as follows
btQuaternion btq = object.m_vehicle->getWheelInfo(i).m_worldTransform.getRotation();
btVector3 wPos = object.m_vehicle->getWheelInfo(i).m_worldTransform.getOrigin();
CC3Vector4 quaternion;
quaternion.x = btq.x();
quaternion.y = btq.y();
quaternion.z = btq.z();
quaternion.w = btq.w();
//wheel.quaternion = quaternion;
switch (i) {
case 0:
wheel = object.Wheel1;
break;
case 1:
wheel = object.Wheel2;
break;
case 2:
wheel = object.Wheel3;
break;
case 3:
wheel = object.Wheel4;
break;
default:
break;
}
wheel.location = CC3VectorMake(wPos.getX(), wPos.getY(), wPos.getZ());
wheel.quaternion = quaternion;
Any pointers in the right direction would be hand,
Many thanks
Duncan.