コード例 #1
0
ファイル: FactoryParser.cs プロジェクト: dotnet/wpf-test
        /// <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);
        }