Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
 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);
         }
     }
 }