public static void Run()
        {
            //ExStart:TriangulateMesh
            // The path to the documents directory.
            string MyDir = RunExamples.GetDataDir();

            // Initialize scene object
            Scene scene = new Scene();

            scene.Open(MyDir + "document.fbx");

            scene.RootNode.Accept(delegate(Node node)
            {
                Mesh mesh = node.GetEntity <Mesh>();
                if (mesh != null)
                {
                    // Triangulate the mesh
                    Mesh newMesh = PolygonModifier.Triangulate(mesh);
                    // Replace the old mesh
                    node.Entity = mesh;
                }
                return(true);
            });
            MyDir = MyDir + RunExamples.GetOutputFilePath("document.fbx");
            scene.Save(MyDir, FileFormat.FBX7400ASCII);
            //ExEnd:TriangulateMesh
            Console.WriteLine("\nMesh has been Triangulated.\nFile saved at " + MyDir);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Triangulate the polygon into a lot of triangles
        /// </summary>
        private void DoTriangulate()
        {
            triangles = null;
            if (points.Count <= 3)
            {
                return;
            }
            // Convert to Vector4[]
            Vector4[] controlPoints = new Vector4[points.Count];
            for (int i = 0; i < points.Count; i++)
            {
                controlPoints[i] = new Vector4(points[i].X, points[i].Y, 0);
            }
            // Triangulate the polygon
            triangleIndices = PolygonModifier.Triangulate(controlPoints);
            // Save triangle vertex for later drawing.
            triangles = new Vector4[triangleIndices.Length][];
            for (int i = 0; i < triangleIndices.Length; i++)
            {
                int[] triangleFace = triangleIndices[i];


                Vector4[] triangle = triangles[i] = new Vector4[3];


                triangle[0] = controlPoints[triangleFace[0]];
                triangle[1] = controlPoints[triangleFace[1]];
                triangle[2] = controlPoints[triangleFace[2]];
            }
        }
        public static void Run()
        {
            // ExStart:ConvertPolygonsToTriangles
            // Load an existing 3D file
            Scene scene = new Scene(RunExamples.GetDataFilePath("document.fbx"));

            // Triangulate a scene
            PolygonModifier.Triangulate(scene);
            // Save 3D scene
            scene.Save(RunExamples.GetOutputFilePath("triangulated_out.fbx"), FileFormat.FBX7400ASCII);
            // ExEnd:ConvertPolygonsToTriangles
        }
Ejemplo n.º 4
0
        public static void Run()
        {
            //ExStart:ConvertPolygonsToTriangles
            // The path to the documents directory.
            string MyDir = RunExamples.GetDataDir();
            // Load an existing 3D file
            Scene scene = new Scene(MyDir + "document.fbx");

            // Triangulate a scene
            PolygonModifier.Triangulate(scene);
            // Save 3D scene
            scene.Save(MyDir + "triangulated_out_.fbx", FileFormat.FBX7400ASCII);
            //ExEnd:ConvertPolygonsToTriangles
        }
Ejemplo n.º 5
0
        public static void Run()
        {
            // ExStart:Save3DMeshesInCustomBinaryFormat
            // load a 3D file
            Scene scene = new Scene(RunExamples.GetDataFilePath("test.fbx"));

            /*
             * 3D format demonstration is simple
             *
             * struct File {
             *   MeshBlock blocks[];
             * };
             *
             * struct Vertex {
             *   float x;
             *   float y;
             *   float z;
             * };
             *
             * struct Triangle {
             *   int a;
             *   int b;
             *   int c;
             * };
             *
             * struct MeshBlock {
             *   int numControlPoints;
             *   int numTriangles;
             *   Vertex vertices[numControlPoints];
             *   Triangle faces[numTriangles];
             * };
             */

            // open file for writing in binary mode
            using (var writer = new BinaryWriter(new FileStream(RunExamples.GetOutputFilePath("Save3DMeshesInCustomBinaryFormat_out"), FileMode.Create, FileAccess.Write)))
            {
                // visit each descent nodes
                scene.RootNode.Accept(delegate(Node node)
                {
                    foreach (Entity entity in node.Entities)
                    {
                        // only convert meshes, lights/camera and other stuff will be ignored
                        if (!(entity is IMeshConvertible))
                        {
                            continue;
                        }
                        Mesh m            = ((IMeshConvertible)entity).ToMesh();
                        var controlPoints = m.ControlPoints;
                        // triangulate the mesh, so triFaces will only store triangle indices
                        int[][] triFaces = PolygonModifier.Triangulate(controlPoints, m.Polygons);
                        // gets the global transform matrix
                        Matrix4 transform = node.GlobalTransform.TransformMatrix;

                        // write number of control points and triangle indices
                        writer.Write(controlPoints.Count);
                        writer.Write(triFaces.Length);
                        // write control points
                        for (int i = 0; i < controlPoints.Count; i++)
                        {
                            // calculate the control points in world space and save them to file
                            var cp = transform * controlPoints[i];
                            writer.Write((float)cp.x);
                            writer.Write((float)cp.y);
                            writer.Write((float)cp.z);
                        }
                        // write triangle indices
                        for (int i = 0; i < triFaces.Length; i++)
                        {
                            writer.Write(triFaces[i][0]);
                            writer.Write(triFaces[i][1]);
                            writer.Write(triFaces[i][2]);
                        }
                    }
                    return(true);
                });
            }
            // ExEnd:Save3DMeshesInCustomBinaryFormat
        }