private void OnWorldGenerated(object sender, EventArgs args) { var world = (World)sender; WorldMeshes = new GroupModel3D(); world.Voxels.ToList().ForEach(vox => { var voxel = (Voxel)vox; CubeFace face; MeshBuilder b = new MeshBuilder(); voxel.GetVisibleCubeFaces().ForEach(f => { if (voxel.Faces.TryGetValue(f, out face)) { b.AddCubeFace(face.CubeCenter, face.Normal, face.Up, face.Distance, face.Width, face.Height); } }); var mm = b.ToMesh(); var simHelper = new MeshSimplification(mm); int size = mm.Indices.Count / 3 / 2; var m = simHelper.Simplify(size, 7, true, true); var mesh = new MeshGeometryModel3D { Geometry = mm, CullMode = SharpDX.Direct3D11.CullMode.Back }; var scale = new ScaleTransform3D(1, 1, 1); var translate = new TranslateTransform3D(0, 0, 0); var group = new Transform3DGroup(); group.Children.Add(scale); group.Children.Add(translate); mesh.Transform = group; mesh.Material = voxel.PhysicalMaterial; if (((Engine.Core.World.Material)voxel.Material).PhysicalMaterial.DiffuseColor.Alpha < 1) { mesh.IsTransparent = true; } WorldMeshes.Children.Add(mesh); voxel.Mesh = mesh; }); //Viewport = InitializeViewport(); //while (Viewport == null) { Debug.WriteLine($"Waiting for Viewport..."); } }
public MainViewModel() { RenderTechniquesManager = new DefaultRenderTechniquesManager(); RenderTechnique = RenderTechniquesManager.RenderTechniques[DefaultRenderTechniqueNames.Blinn]; EffectsManager = new DefaultEffectsManager(RenderTechniquesManager); // ---------------------------------------------- // titles this.Title = "Mesh Simplification Demo"; this.SubTitle = "WPF & SharpDX"; // ---------------------------------------------- // camera setup this.Camera = new PerspectiveCamera { Position = new Point3D(100, 100, 100), LookDirection = new Vector3D(-100, -100, -100), UpDirection = new Vector3D(0, 1, 0) }; // ---------------------------------------------- // setup scene this.AmbientLightColor = new Color4(0.2f, 0.2f, 0.2f, 1.0f); this.Light1Color = (Color4)Color.Gray; this.Light1Direction = new Vector3(-100, -100, -100); SetupCameraBindings(Camera); // ---------------------------------------------- // ---------------------------------------------- // scene model3d this.ModelMaterial = PhongMaterials.Silver; var models = Load3ds("wall12.obj").Select(x => x.Geometry as MeshGeometry3D).ToArray(); //var scale = new Vector3(1f); //foreach (var item in caritems) //{ // for (int i = 0; i < item.Positions.Count; ++i) // { // item.Positions[i] = item.Positions[i] * scale; // } //} Model = models[0]; OrgMesh = Model; //ModelTransform = new Media3D.RotateTransform3D() { Rotation = new Media3D.AxisAngleRotation3D(new Vector3D(1, 0, 0), -90) }; SimplifyCommand = new RelayCommand(Simplify, CanSimplify); ResetCommand = new RelayCommand((o) => { Model = OrgMesh; simHelper = new MeshSimplification(Model); }, CanSimplify); simHelper = new MeshSimplification(Model); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); MeshSimplification editorObj = target as MeshSimplification; if (editorObj == null) { return; } if (GUILayout.Button("Simplify")) { editorObj.Simplify(); } if (GUILayout.Button("Simplify Step-by-step")) { MeshFilter meshFilter = editorObj.GetComponent <MeshFilter>(); int currentVertices = meshFilter.sharedMesh.vertices.Length; editorObj.targetVertices = currentVertices - 1; editorObj.Simplify(); } if (editorObj.debugMode) { index1 = EditorGUILayout.IntField("Index1:", index1); index2 = EditorGUILayout.IntField("Index2:", index2); if (GUILayout.Button("Test Collapse")) { editorObj.TestCollapse(index1, index2); } } }