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); }
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)); }
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(); }