using UnityEngine; [AddComponentMenu("Modifiers/FFD/FFD 3x3x3")] public class MegaFFD3x3x3 : MegaFFD { public override string ModName() { return "FFD3x3x3"; } public override int GridSize() { return 3; } public override Vector3 Map(int ii, Vector3 p) { Vector3 zero = Vector3.zero; Vector3 vector = tm.MultiplyPoint3x4(p); if (inVol) { for (int i = 0; i < 3; i++) { if (vector[i] < 0f - EPSILON || vector[i] > 1f + EPSILON) { return p; } } } float num = 1f - vector.x; float num2 = 1f - vector.y; float num3 = 1f - vector.z; for (int j = 0; j < 3; j++) { float num4; switch (j) { case 0: num4 = num * num; break; case 1: num4 = 2f * vector.x * num; break; default: num4 = vector.x * vector.x; break; } for (int k = 0; k < 3; k++) { float num5; switch (k) { case 0: num5 = num4 * num2 * num2; break; case 1: num5 = num4 * 2f * vector.y * num2; break; default: num5 = num4 * vector.y * vector.y; break; } for (int l = 0; l < 3; l++) { float num6; switch (l) { case 0: num6 = num5 * num3 * num3; break; case 1: num6 = num5 * 2f * vector.z * num3; break; default: num6 = num5 * vector.z * vector.z; break; } int num7 = j * 9 + k * 3 + l; zero.x += pt[num7].x * num6; zero.y += pt[num7].y * num6; zero.z += pt[num7].z * num6; } } } return invtm.MultiplyPoint3x4(zero); } public override int GridIndex(int i, int j, int k) { return i * 9 + j * 3 + k; } }