public static void initialize( Viewport viewport, Vector3 initialLookAt, float rotation )
{
if (camera == null) camera = new MSCamera();
camera.upCamera = Vector3.UnitZ;
camera.cameraPosition = new Vector3(282f, 4.5f, 150);
camera.cameraTarget = new Vector3(0, 0, 0);
camera.viewVector = camera.cameraPosition - camera.cameraTarget;
camera.normalizedViewVector = Vector3.Normalize(camera.viewVector);
camera.shiftVector = initialLookAt;
camera.startingLookAt = initialLookAt;
camera.AdjustPitchAxis();
camera.currPitchAngle = (float)Math.PI / 2 - (float)Math.Acos((float)(Vector3.Dot(camera.viewVector, camera.upCamera) / (float)(Vector3.Distance(camera.cameraPosition, camera.cameraTarget))));
camera.minPitchAngle = (float)Math.PI / 9;
camera.maxPitchAngle = (float)Math.PI / 2;
camera.projectionMatrix = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45), viewport.AspectRatio, 5, 5000);
camera.frustum = new BoundingFrustum(camera.GetView() * camera.ProjectionMatrix);
Matrix yawRotationMatrix = Matrix.CreateFromAxisAngle(Vector3.UnitZ, rotation);
Vector3 transformedReference = Vector3.Transform(camera.cameraPosition, yawRotationMatrix);
camera.upCamera = Vector3.Transform(camera.upCamera, yawRotationMatrix);
camera.cameraPosition = transformedReference;
camera.currYawRotation = rotation / 0.005f;
}