public MeshContainer BuildTriTreeNodeMesh(int triTreeNode, float scale = 1f) { MutableGeoMesh mutablemesh = new MutableGeoMesh(); CollectVertexes(mutablemesh, triTreeNode); mutablemesh.IndexTriangles(); List <Vector3> vertices = new List <Vector3>(); List <Vector2> uv = new List <Vector2>(); List <Vector3> normals = new List <Vector3>(); int[] triTreeNodesPair = GetTriTreeNodePair(triTreeNode); foreach (int nodeIndex in mutablemesh.indexes) { vertices.Add(nodes[nodeIndex].position * scale); normals.Add(nodes[nodeIndex].normal); uv.Add(GetVertexUV(nodes[nodeIndex].position, triangleToPairsMap[triTreeNode])); } MeshContainer meshContainer = new MeshContainer(); meshContainer.vertices = vertices.ToArray(); meshContainer.normals = normals.ToArray(); meshContainer.triangles = mutablemesh.triangles.ToArray(); meshContainer.uv = uv.ToArray(); return(meshContainer); }
protected void CollectVertexes(MutableGeoMesh mesh, int baseTriangleNode, int depth = -1) { if (depth == 0 || tritree[baseTriangleNode].children[0] < 0) { for (int i = 0; i < 3; i++) { mesh.AddVertex(tritree[baseTriangleNode].vertices[i]); } } else { for (int i = 0; i < 4; i++) { CollectVertexes(mesh, tritree[baseTriangleNode].children[i], depth - 1); } } }