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