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; }