123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
-
- using UnityEngine;
- [AddComponentMenu("Modifiers/Radial Skew")]
- public class MegaRadialSkew : MegaModifier
- {
- public float angle = 0.0f;
- public MegaAxis axis = MegaAxis.X;
- public MegaAxis eaxis = MegaAxis.X;
- public bool biaxial = false;
- public override string ModName() { return "RaidalSkew"; }
- public override string GetHelpURL() { return "?page_id=305"; }
- Vector3 GetSkew(Vector3 p)
- {
- if ( biaxial )
- {
- switch ( axis )
- {
- case MegaAxis.X:
- switch ( eaxis )
- {
- case MegaAxis.Y: p.x = p.z = 0.0f; break;
- case MegaAxis.Z: p.x = p.y = 0.0f; break;
- default: p.x = p.y = 0.0f; break;
- }
- break;
- case MegaAxis.Y:
- switch ( eaxis )
- {
- case MegaAxis.X: p.y = p.z = 0.0f; break;
- case MegaAxis.Z: p.x = p.y = 0.0f; break;
- default: p.x = p.y = 0.0f; break;
- }
- break;
- case MegaAxis.Z:
- switch ( eaxis )
- {
- case MegaAxis.X: p.y = p.z = 0.0f; break;
- case MegaAxis.Y: p.x = p.z = 0.0f; break;
- default: p.y = p.z = 0.0f; break;
- }
- break;
- }
- }
- else
- {
- switch ( axis )
- {
- case MegaAxis.X: p.x = 0.0f; break;
- case MegaAxis.Y: p.y = 0.0f; break;
- case MegaAxis.Z: p.z = 0.0f; break;
- }
- }
- return p.normalized;
- }
- public override Vector3 Map(int i, Vector3 p)
- {
- p = tm.MultiplyPoint3x4(p);
- float skewamount = Mathf.Atan(Mathf.Deg2Rad * angle);
- Vector3 skewv = GetSkew(p) * skewamount * p[(int)axis];
- p += skewv;
- return invtm.MultiplyPoint3x4(p);
- }
- }
|