MegaFFD2x2x2.cs 1001 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. 
  2. using UnityEngine;
  3. [AddComponentMenu("Modifiers/FFD/FFD 2x2x2")]
  4. public class MegaFFD2x2x2 : MegaFFD
  5. {
  6. public override string ModName() { return "FFD2x2x2"; }
  7. public override int GridSize()
  8. {
  9. return 2;
  10. }
  11. public override Vector3 Map(int ii, Vector3 p)
  12. {
  13. Vector3 q = Vector3.zero;
  14. Vector3 pp = tm.MultiplyPoint3x4(p);
  15. if ( inVol )
  16. {
  17. for ( int i = 0; i < 3; i++ )
  18. {
  19. if ( pp[i] < -EPSILON || pp[i] > 1.0f + EPSILON )
  20. return p;
  21. }
  22. }
  23. float ip,jp,kp;
  24. for ( int i = 0; i < 2; i++ )
  25. {
  26. ip = i == 0 ? 1.0f - pp.x : pp.x;
  27. for ( int j = 0; j < 2; j++ )
  28. {
  29. jp = ip * (j == 0 ? 1.0f - pp.y : pp.y);
  30. for ( int k = 0; k < 2; k++ )
  31. {
  32. kp = jp * (k == 0 ? 1.0f - pp.z : pp.z);
  33. int ix = (i * 4) + (j * 2) + k;
  34. q.x += pt[ix].x * kp;
  35. q.y += pt[ix].y * kp;
  36. q.z += pt[ix].z * kp;
  37. }
  38. }
  39. }
  40. return invtm.MultiplyPoint3x4(q);
  41. }
  42. public override int GridIndex(int i, int j, int k)
  43. {
  44. return (i * 4) + (j * 2) + k;
  45. }
  46. }