Sign in to follow this  
Relfos

Aligning wheels to terrain

Recommended Posts

Relfos    349
I'm trying to align a vehicle to a heightmap, I spent the whole day reading lots of threads here and on other places, and while I've got almost near the solution, it still doest not work correctly.

My current solution is to align the vehicle with a rotation matrix constructed from pitch,yaw and roll angles.
The yaw is just the direction the player is heading, I first use a simple rotation around the Y with the current yaw to calculate the 4 wheel positions.
Then I calculate the terrain height at each wheel.
Finally the pitch and roll are calculated from the angles between wheels:
pitch: angle between back left wheel and front left wheel
roll: angle between back left wheel and right left wheel

The problem is that this works in some cases, in others the vehicle aligns correclty, but flipped (under the ground).
And in other cases, the angle seems to be negated, for example, it returns 11º when it should be -11º.

I guess the problem has something to do with the atan2 results and trignometry quadrants, and also the fact that I don't take into the account all of the wheels.
What is the perfect way to adjust a vehicle to a heightmap?

Here is my angle calculation function
[code]float Kart::GetWheelAngle(int A, int B)
{
float U, V;
float X, Y;
U = (_Wheels[B]->Position.X - _Wheels[A].Position->X);
V = (_Wheels[B]->Position.Z - _Wheels[A].Position->Z);
if (Abs(U)>Abs(V))
X = U;
else
X = V;
Y = (_Wheels[B]->Position.Y - _Wheels[A].Position.Y);

Result = atan2(Y, Abs(X));
}
[/code]

And I know that using a physics engine would help with this, but want to avoid that, as this will be an iPhone game with very cartoony physics so I want to recreate them from scratch, avoiding the cpu overhead of a physics engine and the whole frustrating tuning that comes with it (actually I've got a version of this demo running with Newton, that I'm going to continue in case I can't get a solution for this).

Here is a pic of my current demo (in this screenshot the vehicle is correclty aligned using my code, but sadly it does not always work)
[img]http://img33.imageshack.us/img33/38/image3vi.jpg[/img]

Share this post


Link to post
Share on other sites
RDragon1    1205
What if you just look at the terrain under the center of the vehicle and match your orientation to that? Take the heightmap and generate a normal map, then sample the derivative of the normal in the 'right' and 'backward' direction along the heightmap to get your right and back vectors, then take the cross product to get the normal (up) vector. Normalize and that should get you a coordinate frame to orient the vehicle with.

Or try doing a raycast straight down onto the geometry and get the orientation of the triangle you're above

If you want to sample at each wheel location you could do that and average the results to orient the whole car

Share this post


Link to post
Share on other sites
Relfos    349
Strangely I have tried that before, and it didnt look good, however, it was probably some error in my code, I tried it today, and yes, sampling the normal at the wheels works fine, the only problem is with movement, I need to smooth it out maybe.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this