/// <summary/> public static Camera MakeCamera(Variation v) { Camera camera = null; if (v["Camera"] != null) { v.AssertAbsenceOf("CameraType", "CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraWidth", "CameraFieldOfView", "CameraViewMatrix", "CameraProjectionMatrix"); camera = CameraFactory.MakeCamera(v["Camera"]); } else { v.AssertExistenceOf("CameraType"); switch (v["CameraType"]) { case "Orthographic": v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraWidth"); camera = new OrthographicCamera(); SetProjectionCameraParameters(camera, v); ((OrthographicCamera)camera).Width = StringConverter.ToDouble(v["CameraWidth"]); break; case "Perspective": v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraFieldOfView"); camera = new PerspectiveCamera(); SetProjectionCameraParameters(camera, v); ((PerspectiveCamera)camera).FieldOfView = StringConverter.ToDouble(v["CameraFieldOfView"]); break; case "Matrix": v.AssertExistenceOf("CameraViewMatrix", "CameraProjectionMatrix"); camera = new MatrixCamera(); ((MatrixCamera)camera).ViewMatrix = StringConverter.ToMatrix3D(v["CameraViewMatrix"]); ((MatrixCamera)camera).ProjectionMatrix = StringConverter.ToMatrix3D(v["CameraProjectionMatrix"]); break; case "MatrixOrtho": v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraWidth", "CameraHeight"); camera = new MatrixCamera(); ((MatrixCamera)camera).ViewMatrix = MakeViewMatrix(v); ((MatrixCamera)camera).ProjectionMatrix = MakeOrthoMatrix(v); break; case "MatrixPersp": v.AssertExistenceOf("CameraPosition", "CameraLookDirection", "CameraUp", "CameraNearPlaneDistance", "CameraFarPlaneDistance", "CameraFieldOfViewX", "CameraFieldOfViewY"); camera = new MatrixCamera(); ((MatrixCamera)camera).ViewMatrix = MakeViewMatrix(v); ((MatrixCamera)camera).ProjectionMatrix = MakePerspMatrix(v); break; default: throw new ApplicationException("Invalid camera type: " + v["CameraType"]); } } return(camera); }