コード例 #1
0
        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..."); }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
    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);
            }
        }
    }