Arbitrary Rotation about a Sphere
Posted
by
Der
on Game Development
See other posts from Game Development
or by Der
Published on 2012-10-17T10:40:23Z
Indexed on
2012/10/17
11:23 UTC
Read the original article
Hit count: 406
I'm coding a mechanic which allows a user to move around the surface of a sphere. The position on the sphere is currently stored as theta
and phi
, where theta
is the angle between the z-axis and the xz projection of the current position (i.e. rotation about the y axis), and phi
is the angle from the y-axis to the position. I explained that poorly, but it is essentially theta = yaw
, phi = pitch
Vector3 position = new Vector3(0,0,1);
position.X = (float)Math.Sin(phi) * (float)Math.Sin(theta);
position.Y = (float)Math.Sin(phi) * (float)Math.Cos(theta);
position.Z = (float)Math.Cos(phi);
position *= r;
I believe this is accurate, however I could be wrong.
I need to be able to move in an arbitrary pseudo two dimensional direction around the surface of a sphere at the origin of world space with radius r
. For example, holding W should move around the sphere in an upwards direction relative to the orientation of the player.
I believe I should be using a Quaternion to represent the position/orientation on the sphere, but I can't think of the correct way of doing it. Spherical geometry is not my strong suit.
Essentially, I need to fill the following block:
public void Move(Direction dir)
{
switch (dir)
{
case Direction.Left:
// update quaternion to rotate left
break;
case Direction.Right:
// update quaternion to rotate right
break;
case Direction.Up:
// update quaternion to rotate upward
break;
case Direction.Down:
// update quaternion to rotate downward
break;
}
}
© Game Development or respective owner