示例#1
0
        public void CatmullClark(Model model)
        {
            if (model == null)
            {
                return;
            }
            GeometryMesh mesh = model.Batch.MeshSource as GeometryMesh;

            if (mesh == null)
            {
                return;
            }
            Geometry newGeometry = new CatmullClarkGeometryOperation(mesh.Geometry).Destination;

            newGeometry.ComputePolygonCentroids();
            newGeometry.ComputePolygonNormals();
            //newGeometry.ComputeCornerNormals(2.0f * (float)Math.PI);
            newGeometry.SmoothNormalize("corner_normals", "polygon_normals", (2.0f * (float)Math.PI));
            newGeometry.BuildEdges();

            MeshModified op = new MeshModified(
                model,
                new MeshModified.State(
                    model.Name,
                    model.Batch
                    ),
                new MeshModified.State(
                    "Catmull-Clark(" + model.Name + ")",
                    new Batch(
                        new GeometryMesh(
                            newGeometry,
                            NormalStyle.PointNormals
                            ),
                        model.Batch.Material
                        )
                    )
                );

            operationStack.Do(op);
        }
示例#2
0
        private void AddReflectionTestObjects()
        {
            GeometryMesh cube4       = new GeometryMesh(new Cube(2.0f), NormalStyle.PointNormals);
            Geometry     newGeometry = new CatmullClarkGeometryOperation(cube4.Geometry).Destination;

            newGeometry = new CatmullClarkGeometryOperation(newGeometry).Destination;
            newGeometry.ComputePolygonCentroids();
            newGeometry.ComputePolygonNormals();
            //newGeometry.ComputeCornerNormals(0.0f);
            newGeometry.SmoothNormalize("corner_normals", "polygon_normals", (2.0f * (float)Math.PI));
            newGeometry.BuildEdges();

            float a = 4.0f;

            GeometryMesh cube4s = new GeometryMesh(newGeometry, NormalStyle.PointNormals);

            AddModel(new Model("PosX", cube4, materialManager["CubeMaterials[0]"], a, 0.0f, 0.0f));
            AddModel(new Model("NegX", cube4, materialManager["CubeMaterials[1]"], -a, 0.0f, 0.0f));
            AddModel(new Model("PosY", cube4, materialManager["CubeMaterials[2]"], 0.0f, a, 0.0f));
            AddModel(new Model("NegY", cube4, materialManager["CubeMaterials[3]"], 0.0f, -a, 0.0f));
            AddModel(new Model("PosZ", cube4, materialManager["CubeMaterials[4]"], 0.0f, 0.0f, a));
            AddModel(new Model("NegZ", cube4, materialManager["CubeMaterials[5]"], 0.0f, 0.0f, -a));
        }
示例#3
0
        public void DemoInit()
        {
            InitializeRenderers();
            windowViewport           = new RenderStack.Viewport(this.Width, this.Height);
            Renderer.CurrentViewport = windowViewport;

            blinnPhong = Material.Create(Renderer.Programs.BlinnPhong);
            blinnPhong.Parameters.Add <Floats>("surface_color").Value     = new Floats(0.5f, 0.5f, 0.5f);
            blinnPhong.Parameters.Add <Floats>("surface_rim_color").Value = new Floats(0.1f, 0.2f, 0.5f);
            blinnPhong.Parameters.Add <Floats>("surface_diffuse_reflectance_color").Value     = new Floats(0.24f, 0.24f, 0.24f);
            blinnPhong.Parameters.Add <Floats>("surface_specular_reflectance_color").Value    = new Floats(0.8f, 0.8f, 0.8f);
            blinnPhong.Parameters.Add <Floats>("surface_specular_reflectance_exponent").Value = new Floats(200.0f);

            gridMaterial = Material.Create(Renderer.Programs.Grid);

#if false
            var mesh = PolyMesh.CreateGreatRhombicosidodecahedron(1.0);
#else
            var mesh   = PolyMesh.CreateTruncatedIcosahedron(1.0);
            var dodeca = PolyMesh.CreateDodecahedron(1.0);
            Attach(mesh, dodeca, 5);
#endif

            var subd1 = new SubdivideGeometryOperation(mesh.Geometry).Destination;
            var subd2 = new SubdivideGeometryOperation(subd1).Destination;
            var cc1   = new CatmullClarkGeometryOperation(subd2).Destination;
            var cc2   = new CatmullClarkGeometryOperation(cc1).Destination;
            cc2.ComputePolygonCentroids();
            cc2.ComputePolygonNormals();
            cc2.ComputeCornerNormals(2.0f * (float)Math.PI);
            //cc2.BuildEdges();

            mesh  = new GeometryMesh(cc2);
            model = Model.Create("model", mesh, blinnPhong);
            //model                   = Model.Create("model", mesh, gridMaterial);

            camera                   = Camera.Create();
            camera.FovXRadians       = OpenTK.MathHelper.DegreesToRadians(90.0f);
            camera.FovYRadians       = OpenTK.MathHelper.DegreesToRadians(90.0f);
            camera.ProjectionType    = ProjectionType.PerspectiveVertical;
            camera.Frame.Parent      = model.Frame;
            cameraPath               = new OrbitPath(camera.Frame);
            cameraPath.Points[0.0f]  = new OrbitPoint(0.0f, 0.0f, 20.0f);
            cameraPath.Points[2.0f]  = new OrbitPoint(0.0f, 0.0f, 12.0f);
            cameraPath.Points[3.0f]  = new OrbitPoint(0.5f, 0.2f, 15.0f);
            cameraPath.Points[4.0f]  = new OrbitPoint(1.0f, 0.5f, 12.0f);
            cameraPath.Points[5.0f]  = new OrbitPoint(1.4f, 1.0f, 16.0f);
            cameraPath.Points[7.0f]  = new OrbitPoint(2.0f, 1.5f, 13.0f);
            cameraPath.Points[10.0f] = new OrbitPoint(1.6f, 0.0f, 20.0f);

            exposure = new Signal();
            exposure.Values[0.0f]  = 0.0f;
            exposure.Values[1.0f]  = 1.0f;
            exposure.Values[2.0f]  = 2.0f;
            exposure.Values[3.0f]  = 1.0f;
            exposure.Values[4.0f]  = 5.0f;
            exposure.Values[8.0f]  = 1.0f;
            exposure.Values[10.0f] = 0.0f;

            InitializeRendererParameters();
            DemoStart();
        }