// This source was written in C# // public class Camera3D{ public static Vector3 cameraPosition; public static Vector3 cameraTarget; public static Vector3 cameraUpVector; public static float radius = 1; public static float moveDist = 1f; private static float hRadians; private static float vRadians; public Camera3D(){} public static void SetCamera(Vector3 cPosition, float h, float v){ cameraPosition = cPosition; cameraTarget = new Vector3(); cameraUpVector = new Vector3(); hRadians = h; vRadians = v; RotateCamera(0,0); } public static void RotateCamera(float h, float v){ hRadians += h; vRadians += v; cameraTarget.Y = cameraPosition.Y+(float)(radius*Math.Sin(vRadians)); cameraTarget.X = cameraPosition.X+(float)(radius*Math.Cos(vRadians)*Math.Cos(hRadians)); cameraTarget.Z = cameraPosition.Z+(float)(radius*Math.Cos(vRadians)*Math.Sin(hRadians)); cameraUpVector.X = cameraPosition.X-cameraTarget.X; cameraUpVector.Y = Math.Abs(cameraPosition.Y+(float)(radius*Math.Sin(vRadians+Math.PI/2))) ; cameraUpVector.Z = cameraPosition.Z-cameraTarget.Z; } public static void SlideCamera(float h, float v){ cameraPosition.Y += v*moveDist; cameraPosition.X += h*moveDist*(float)Math.Cos(hRadians+Math.PI/2); cameraPosition.Z += h*moveDist*(float)Math.Sin(hRadians+Math.PI/2); RotateCamera(0,0); } public static void MoveCamera(float d){ cameraPosition.Y += d*moveDist*(float)Math.Sin(vRadians); cameraPosition.X += d*moveDist*(float)(Math.Cos(vRadians)*Math.Cos(hRadians)); cameraPosition.Z += d*moveDist*(float)(Math.Cos(vRadians)*Math.Sin(hRadians)); RotateCamera(0,0); } }