void splitTriangles(middletriangle tri, int n)
    {
        Vector3 posf, poss, post;
        Vector2 fu, su, tu;

        if (n >= roundcount)
        {
            //	tri.index=tempMesh.Count;
            tempMesh.Add(tri);
            return;
        }
        else
        {
            posf = tri.vertice[2] + (tri.vertice[0] - tri.vertice[2]) / a;
            poss = tri.vertice[1] + (tri.vertice[0] - tri.vertice[1]) / b;
            post = tri.vertice[2] + (tri.vertice[1] - tri.vertice[2]) / c;
            fu   = tri.triangleuvs[2] + (tri.triangleuvs[0] - tri.triangleuvs[2]) / a;
            su   = tri.triangleuvs[1] + (tri.triangleuvs[0] - tri.triangleuvs[1]) / b;
            tu   = tri.triangleuvs[2] + (tri.triangleuvs[1] - tri.triangleuvs[2]) / c;

            middletriangle newtri1 = new middletriangle(tri.vertice[0], poss, posf, tri.triangleuvs[0], su, fu);
            newtri1.surfnormal = tri.surfnormal;
            splitTriangles(newtri1, n + 1);
            middletriangle newtri2 = new middletriangle(posf, poss, post, fu, su, tu);
            newtri2.surfnormal = tri.surfnormal;
            splitTriangles(newtri2, n + 1);
            middletriangle newtri3 = new middletriangle(poss, tri.vertice[1], post, su, tri.triangleuvs[1], tu);
            newtri3.surfnormal = tri.surfnormal;
            splitTriangles(newtri3, n + 1);
            middletriangle newtri4 = new middletriangle(posf, post, tri.vertice[2], fu, tu, tri.triangleuvs[2]);
            newtri4.surfnormal = tri.surfnormal;
            splitTriangles(newtri4, n + 1);
        }
    }
    // Use this for initialization
    void Start()
    {
        myMesh = GetComponent <MeshFilter>().mesh;
        verts  = myMesh.vertices;
        tris   = myMesh.triangles;
        uvs    = myMesh.uv;
        int trilen = tris.Length / 3;

        for (int i = 0; i < trilen; i++)
        {
            middletriangle a = new middletriangle();
            for (int j = 0; j < 3; j++)
            {
                a.vertice[j]     = verts[tris[i * 3 + j]];
                a.triangleuvs[j] = uvs[tris[i * 3 + j]];
            }
            a.surfnormal = getNormal(a.vertice);
            changedMesh.Add(a);
        }

        foreach (middletriangle a in changedMesh)
        {
            if (!bc.Contains(a))
            {
                foreach (middletriangle b in changedMesh)
                {
                    if (a != b)
                    {
                        if (equalvertice(a.vertice, b.vertice))
                        {
                            bc.Add(b);
                        }
                    }
                }
            }
        }
        foreach (middletriangle b in bc)
        {
            changedMesh.Remove(b);
        }
        foreach (middletriangle c in changedMesh)
        {
            splitTriangles(c, 0);
        }
        changedMesh.Clear();
        foreach (middletriangle c in tempMesh)
        {
            changedMesh.Add(c);
        }
        CalcMesh();
        //GetComponent<MeshFilter>().mesh.vertices = verts;
    }