using UnityEngine; [AddComponentMenu("Modifiers/FFD/FFD 4x4x4")] public class MegaFFD4x4x4 : MegaFFD { public override string ModName() { return "FFD4x4x4"; } public override int GridSize() { return 4; } 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; float num4 = num2 * num2; float num5 = vector.y * vector.y; float num6 = num3 * num3; float num7 = vector.z * vector.z; for (int j = 0; j < 4; j++) { float num8; switch (j) { case 0: num8 = num * num * num; break; case 1: num8 = 3f * vector.x * num * num; break; case 2: num8 = 3f * vector.x * vector.x * num; break; default: num8 = vector.x * vector.x * vector.x; break; } for (int k = 0; k < 4; k++) { float num9; switch (k) { case 0: num9 = num8 * (num2 * num4); break; case 1: num9 = num8 * (3f * vector.y * num4); break; case 2: num9 = num8 * (3f * num5 * num2); break; default: num9 = num8 * (num5 * vector.y); break; } for (int l = 0; l < 4; l++) { float num10; switch (l) { case 0: num10 = num9 * (num3 * num6); break; case 1: num10 = num9 * (3f * vector.z * num6); break; case 2: num10 = num9 * (3f * num7 * num3); break; default: num10 = num9 * (num7 * vector.z); break; } int num11 = (j << 4) + (k << 2) + l; zero.x += pt[num11].x * num10; zero.y += pt[num11].y * num10; zero.z += pt[num11].z * num10; } } } return invtm.MultiplyPoint3x4(zero); } public override int GridIndex(int i, int j, int k) { return (i << 4) + (j << 2) + k; } }