Triangle.ConvertToOBJFile C# (CSharp) Méthode

ConvertToOBJFile() public static méthode

public static ConvertToOBJFile ( List triangles, string name = "TriangleMesh", bool removeDuplicateVertices = true ) : string
triangles List
name string
removeDuplicateVertices bool
Résultat string
    public static string ConvertToOBJFile(List<Triangle> triangles, string name = "TriangleMesh", bool removeDuplicateVertices = true)
    {
        List<Vector3> vertices = new List<Vector3>();
        List<Vector2> uvs = new List<Vector2>();
        List<int> indices = new List<int>();
        foreach (var tri in triangles){
            for (int i=0;i<3;i++){
                vertices.Add(tri.points[i].ToVector3());
                uvs.Add(tri.uvs[i].ToVector2());
                indices.Add(indices.Count);
            }
        }

        /*if (removeDuplicateVertices) {
            List<KDTreeData> list = new List<KDTreeData>();
            for (int i=0;i<vertices.Count;i++){
                list.Add(new KDTreeData(i, vertices[i]));
            }

            List<Vector3> verticesNew = new List<Vector3>();
            List<Vector2> uvsNew = new List<Vector2>();
            List<int> indicesNew = new List<int>();

            KDTreePoint kdTree = new KDTreePoint(list);
            for (int i=0;i<vertices.Count;i++){
                var possibleIntersections = kdTree.Intersect(vertices[i]);
                bool isLowestIntersection = true;
                if (possibleIntersections.Count==0){
                    Debug.LogError("Warning no intersection found");
                }
                KDTreeData lowest = possibleIntersections[0];
                foreach (KDTreeData inters in possibleIntersections){
                    if (inters.index < lowest.index){
                        lowest = inters;
                    }
                }
                if (lowest.index == i){
                    // add new vertex
                    indicesNew.Add(verticesNew.Count);
                    // update reference
                    lowest.index = verticesNew.Count;
                    verticesNew.Add(vertices[i]);
                    uvsNew.Add(uvs[i]);

                } else {
                    // add new vertex
                    indicesNew.Add(lowest.index);
                }
            }
            vertices = verticesNew;
            uvs = uvsNew;
            indices = indicesNew;
        }
        */
        // export
        System.Text.StringBuilder sb = new StringBuilder("# Custom geometry export (UNITY) OBJ File: '"+name+"'\n");
        sb.Append("o ").Append(name).Append("\n");
        foreach (var v in vertices){
            sb.AppendFormat("v {0} {1} {2}\n", v.x,v.y,v.z);
        }
        foreach (var u in uvs){
            sb.AppendFormat("vt {0} {1}\n", -u.x,u.y);
        }
        for (int i=0;i<indices.Count;i=i+3){
            sb.AppendFormat("f {0}/{1} {2}/{3} {4}/{5}\n",
                indices[0+i]+1, indices[0+i]+1,
                indices[1+i]+1, indices[1+i]+1,
                indices[2+i]+1, indices[2+i]+1);
        }
        return sb.ToString (); // "# Blender v2.76 (sub 0) OBJ File: ''\n# www.blender.org\nmtllib monkey.mtl\no Plane\nv -1.000000 0.000000 1.000000\nv 1.000000 0.000000 1.000000\nv -1.000000 0.000000 -1.000000\nv 1.000000 0.000000 -1.000000\nvn 0.000000 1.000000 0.000000\nusemtl None\ns off\nf 1//1 2//1 4//1 3//1\n"
    }