コード例 #1
0
 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);
             }
         }
     }
 }
コード例 #2
0
    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);
    }