protected void xCollectVertexes(TMutableGeoMesh mesh, int baseTriangleNode = -1, int depth = -1) { if (baseTriangleNode < 0) { for (int i = 0; i < IcosahedronTriangles; i++) { xCollectVertexes(mesh, i, depth); } } else { if (depth == 0 || xTriTree[baseTriangleNode].children[0] < 0) { for (int i = 0; i < 3; i++) { mesh.AddVertex(xTriTree[baseTriangleNode].vertices[i]); } } else { for (int i = 0; i < 4; i++) { xCollectVertexes(mesh, xTriTree[baseTriangleNode].children[i], depth - 1); } } } }
public MeshContainer GenerateMesh(int region = -1, bool generateUV = false, int depth = -1) { TMutableGeoMesh geomesh = new TMutableGeoMesh(); xCollectVertexes(geomesh, region, depth); geomesh.IndexTriangles(); BuildNormals(); List <Vector3> vertices = new List <Vector3>(); List <Vector3> normals = new List <Vector3>(); List <Vector2> uv = new List <Vector2>(); foreach (int nodeIndex in geomesh.indexes) { vertices.Add(xNodes[nodeIndex].position); normals.Add(xNodes[nodeIndex].normal); } //Debug.Log(vertices.Count); //Debug.Log(geomesh.triangles.Count); /*Mesh mesh = new Mesh(); * mesh.vertices = vertices.ToArray(); * mesh.normals = normals.ToArray(); * mesh.triangles = geomesh.triangles.ToArray(); * return mesh;*/ MeshContainer meshContainer = new MeshContainer(); meshContainer.vertices = vertices.ToArray(); meshContainer.normals = normals.ToArray(); meshContainer.triangles = geomesh.triangles.ToArray(); return(meshContainer); }