// Rotate camera left or right (aka Pan) public void Yaw(float angle) { // rotate around the up vector (normally the y-axis) viewdir = (viewdir * (float) Math.Cos (angle)) - (right * (float) Math.Sin (angle)); viewdir.Normalize (); right = viewdir.Cross (up); right.Normalize (); }
// Direct the camera toward a specific point in space using the specified upward orientation public void LookAt(Vertex point, Vector upVector) { viewdir = point - position; viewdir.Normalize (); up = upVector.Normal; right = viewdir.Cross (up); right.Normalize (); }
// Rotate camera up or down (aka Tilt) public void Pitch(float angle) { // rotate around the right vector (normally the x-axis) viewdir = (viewdir * (float) Math.Cos (angle)) + (up * (float) Math.Sin (angle)); viewdir.Normalize (); up = viewdir.Cross (right); up.Normalize (); }
public void LookAt(Vertex point) { Vector delta = point - position; viewdir = delta.Normal; if (Math.Abs (delta.x) < 0.00001f && Math.Abs (delta.z) < 0.00001f) { delta.x = 0.0f; delta.Normalize (); right = new Vector (1.0f, 0.0f, 0.0f); up = delta.Cross (right); right = viewdir.Cross (up) * -1.0f; } else { delta.y = 0.0f; delta.Normalize (); up = new Vector (0.0f, 1.0f, 0.0f); right = delta.Cross (up) * -1.0f; up = viewdir.Cross (right); } right.Normalize (); up.Normalize (); }