/// <summary> /// Deforms the vertices by the funtion * normal /// should be one of the final deform by normal functions /// </summary> /// <param name="function">Function must retun a float value</param> public void DeformByNormal(returnAFloat function) { for (int i = 0; i < vertices.Length; i++) { Vector3 temp = normals[i] * function(); for (int k = 0; k < vertices.Length; k++) { if (i == k) { continue; } else if (vertices[i] == vertices[k]) { vertices[k] += temp; } } vertices[i] += temp; } }
public void TesselateWithModifiedNormals(returnAFloat function) { try { var tempVerts = new Vector3[triangles.Length * 4]; var tempUv = new Vector2[triangles.Length * 4]; var tempTris = new int[triangles.Length * 4]; var tempNormals = new Vector3[triangles.Length * 4]; for (int i = 0; i < (triangles.Length / 3); i++) { tempTris[i * 12] = (i * 12); //triangles[i*3]; tempVerts[i * 12] = vertices[triangles[i * 3]]; tempNormals[i * 12] = normals[triangles[i * 3]]; tempUv[i * 12] = uv[triangles[i * 3]]; Vector2 uvM0 = MathXT.midPoint(uv[triangles[(i * 3) + 1]], uv[triangles[(i * 3) + 2]]); Vector2 uvM1 = MathXT.midPoint(uv[triangles[(i * 3)]], uv[triangles[(i * 3) + 2]]); Vector2 uvM2 = MathXT.midPoint(uv[triangles[(i * 3)]], uv[triangles[(i * 3) + 1]]); Vector3 m0 = MathXT.midPoint(vertices[triangles[(i * 3) + 2]], vertices[triangles[(i * 3) + 1]]); Vector3 m1 = MathXT.midPoint(vertices[triangles[(i * 3)]], vertices[triangles[(i * 3) + 2]]); Vector3 m2 = MathXT.midPoint(vertices[triangles[(i * 3)]], vertices[triangles[(i * 3) + 1]]); tempVerts[(i * 12) + 1] = m2; tempTris[(i * 12) + 1] = (i * 12) + 1; tempNormals[(i * 12) + 1] = normals[triangles[i * 3]] * function(); tempUv[(i * 12) + 1] = uvM2; tempVerts[(i * 12) + 2] = m1; tempTris[(i * 12) + 2] = (i * 12) + 2; tempNormals[(i * 12) + 2] = normals[triangles[i * 3]] * function(); tempUv[(i * 12) + 2] = uvM1; tempVerts[(i * 12) + 3] = vertices[triangles[(i * 3) + 1]]; tempTris[(i * 12) + 3] = (i * 12) + 3; //triangles[(i*3)+1]; tempNormals[(i * 12) + 3] = normals[triangles[(i * 3) + 1]]; tempUv[(i * 12) + 3] = uv[triangles[(i * 3) + 1]]; tempVerts[(i * 12) + 4] = m0; tempTris[(i * 12) + 4] = (i * 12) + 4; tempNormals[(i * 12) + 4] = normals[triangles[(i * 3) + 1]] * function(); tempUv[(i * 12) + 4] = uvM0; tempVerts[(i * 12) + 5] = m2; tempTris[(i * 12) + 5] = (i * 12) + 5; tempNormals[(i * 12) + 5] = normals[triangles[(i * 3) + 1]] * function(); tempUv[(i * 12) + 5] = uvM2; //triangle 3 tempVerts[(i * 12) + 6] = vertices[triangles[(i * 3) + 2]]; tempTris[(i * 12) + 6] = (i * 12) + 6; //triangles[(i*3)+2]; tempNormals[(i * 12) + 6] = normals[triangles[(i * 3) + 2]]; tempUv[(i * 12) + 6] = uv[triangles[(i * 3) + 2]]; tempVerts[(i * 12) + 7] = m1; tempTris[(i * 12) + 7] = (i * 12) + 7; tempNormals[(i * 12) + 7] = normals[triangles[(i * 3) + 2]] * function(); tempUv[(i * 12) + 7] = uvM1; tempVerts[(i * 12) + 8] = m0; tempTris[(i * 12) + 8] = (i * 12) + 8; tempNormals[(i * 12) + 8] = normals[triangles[(i * 3) + 2]] * function(); tempUv[(i * 12) + 8] = uvM0; //triangle 4 last one tempVerts[(i * 12) + 9] = m0; tempTris[(i * 12) + 9] = (i * 12) + 9; tempNormals[(i * 12) + 9] = normals[triangles[(i * 3) + 1]] * function(); tempUv[(i * 12) + 9] = uvM0; tempVerts[(i * 12) + 10] = m1; tempTris[(i * 12) + 10] = (i * 12) + 10; tempNormals[(i * 12) + 10] = normals[triangles[(i * 3) + 2]] * function(); tempUv[(i * 12) + 10] = uvM1; tempVerts[(i * 12) + 11] = m2; tempTris[(i * 12) + 11] = (i * 12) + 11; tempNormals[(i * 12) + 11] = normals[triangles[(i * 3)]] * function(); tempUv[(i * 12) + 11] = uvM2; } triangles = tempTris; vertices = tempVerts; uv = tempUv; normals = tempNormals; } catch (System.Exception e) { UnityEngine.Debug.LogException(e); } }