Firstly – Z is Up in this problem.
Context: Top down 2D Game using 3D objects.
The player and all enemies are Spheres that can move in any direction on a 2D Plane (XY). They rotate as you would expect when they move. Their velocity is a 3D vector in world space and this is how I influence them. They aren’t allowed to rotate on the spot.
I need to find a formula to determine the direction one of these spheres should move in order to get their Z-Axis (or any axis really) pointing a specified direction in world space.
Some examples may be in order:
X
|
Z--Y
This one is simple: The Spheres local axes matches the world so if I want the Spheres Z-Axis to point along 1,0,0 then I can move the sphere along 1,0,0.
The one that gives me trouble is this:
X
|
Y--Z
Now I know that to get the Z-Axis to point along 1,0,0 in world space I have to tell the sphere to move along 1,1,0 but I don’t know/understand WHY that is the case.
I’ve been programming for ten years but I absolutely suck at vector maths so assume I’m an idiot when trying to explain 🙂
All right, I think I see what you mean.
Take a ball– you must have one lying around. Mark a spot on it to indicate an axis of interest. Now pick a direction in which you want the axis to point. The trick is to rotate the ball in place to bring the axis to the right direction– we’ll get to the rolling in a minute.
The obvious way is to move “directly”, and if you do this a few times you’ll notice that the axis around which you are rotating the ball is perpendicular to the axis you’re trying to move. It’s as if the spot is on the equator and you’re rotating around the North-South axis. Every time you pick a new direction, that direction and your marked axis determine the new equator. Also notice (this may be tricky) that you can draw a great circle (that’s a circle that goes right around the sphere and divides it into equal halves) that goes between the mark and the destination, so that they’re on opposite hemispheres, like mirror images. The poles are always on that circle.
Now suppose you’re not free to choose the poles like that. You have a mark, you have a desired direction, so you have the great circle, and the north pole will be somewhere on the circle, but it could be anywhere. Imagine that someone else gets to choose it. The mark will still rotate to the destination, but they won’t be on the equator any more, they’ll be at some other latitude.
Now put the ball on the floor and roll it — don’t worry about the mark for now. Notice that it rotates around a horizontal axis, the poles, and touches the floor along a circle, the equator (which is now vertical). The poles must be somewhere on the “waist” of the sphere, halfway up from the floor (don’t call it the equator). If you pick the poles on that circle, you choose the direction of rolling.
Now look at the marks, and draw the great circle that divides them. The poles must be on that circle. Look where that circle crosses the “waist”; that’s where your poles must be.
Tell me if this makes sense, and we can put in the math.