PDA

View Full Version : Changing Elevation

02-13-2001, 05:23 PM
OK here goes, right now I have a small engine which allows you t move forward, back
turn around ect. Now lets say my world which I am walking through is flat, then this is fine. However when the elevation changes ( + or - on the y-axis) I would keep moving straigh through midair. How would I be able to make the program know the elvation and change so when I walked formard on a slope I would go down aswell?

DFrey
02-13-2001, 05:52 PM
Exactly how is dependent on the structure of your engine and preference. But in the most general terms, you need to implement gravity and collision detection.

dans
02-14-2001, 01:31 PM
Assuming you have a landscape or whatever made of triangles. your current x/z position should point you at the triangle you are on. (cell)

Solve the plane equation for the point that you're standing on.

The plane equation is (x)nx + (y)ny + (z)nz + c = 0.

{nx, ny, nz} is the plane normal of the current cell.

c is a constant offset which can be solved by plugging in
the coordinates of one of the corner points of the cell.

Your current position on the map is {x,z} solve for y.

In pseudocode:

// Get my current position on the map
pos = {something};

// Figure out the current cell I'm standing in
cell = FindCell(pos);

// Get the plane normal of the cell or triangle
normal = cell.normal;

// Get one of the corner points of the cell
point = cell.point(1);

// Solve for c, the plane equation offset
c = normal.x * point.x + normal.y * point.y + normal.z * point.z;

// Now solve for the y component of my position
pos.y = (c - normal.x * pos.x - normal.z * pos.z) / normal.y;

Rizo
02-15-2001, 12:09 AM
You should be able to accomplish this just by using glRotate* and glTranslate*. I had to write a program where the object coordinates had to stick to the object when I was rotating it. At one point I got it so that if you moved the x-axis to any orientation, a translation in x direction would move the object in that direction.

Try this (I'm not sure if it works).

Apply your rotation and save it in a matrix.
Load your matrix just before you do translation and then translate it and save the matrix...

if this doesn't work, just play with it, I am 100% sure my program was working this way (but it wasn't meant to do so).

Rizo

Me
02-16-2001, 12:30 PM
I am trying to do the same thing and am having trouble aswell.
Dans could you explain your way a bit more or if you have or know where i could get a sample of it tell me please.
thanks alot