MegaRadialSkew.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. 
  2. using UnityEngine;
  3. [AddComponentMenu("Modifiers/Radial Skew")]
  4. public class MegaRadialSkew : MegaModifier
  5. {
  6. public float angle = 0.0f;
  7. public MegaAxis axis = MegaAxis.X;
  8. public MegaAxis eaxis = MegaAxis.X;
  9. public bool biaxial = false;
  10. public override string ModName() { return "RaidalSkew"; }
  11. public override string GetHelpURL() { return "?page_id=305"; }
  12. Vector3 GetSkew(Vector3 p)
  13. {
  14. if ( biaxial )
  15. {
  16. switch ( axis )
  17. {
  18. case MegaAxis.X:
  19. switch ( eaxis )
  20. {
  21. case MegaAxis.Y: p.x = p.z = 0.0f; break;
  22. case MegaAxis.Z: p.x = p.y = 0.0f; break;
  23. default: p.x = p.y = 0.0f; break;
  24. }
  25. break;
  26. case MegaAxis.Y:
  27. switch ( eaxis )
  28. {
  29. case MegaAxis.X: p.y = p.z = 0.0f; break;
  30. case MegaAxis.Z: p.x = p.y = 0.0f; break;
  31. default: p.x = p.y = 0.0f; break;
  32. }
  33. break;
  34. case MegaAxis.Z:
  35. switch ( eaxis )
  36. {
  37. case MegaAxis.X: p.y = p.z = 0.0f; break;
  38. case MegaAxis.Y: p.x = p.z = 0.0f; break;
  39. default: p.y = p.z = 0.0f; break;
  40. }
  41. break;
  42. }
  43. }
  44. else
  45. {
  46. switch ( axis )
  47. {
  48. case MegaAxis.X: p.x = 0.0f; break;
  49. case MegaAxis.Y: p.y = 0.0f; break;
  50. case MegaAxis.Z: p.z = 0.0f; break;
  51. }
  52. }
  53. return p.normalized;
  54. }
  55. public override Vector3 Map(int i, Vector3 p)
  56. {
  57. p = tm.MultiplyPoint3x4(p);
  58. float skewamount = Mathf.Atan(Mathf.Deg2Rad * angle);
  59. Vector3 skewv = GetSkew(p) * skewamount * p[(int)axis];
  60. p += skewv;
  61. return invtm.MultiplyPoint3x4(p);
  62. }
  63. }