Vector3 DeformOld(Vector3 p, MegaShapeLoft loft, MegaLoftLayerSimple layer, float percent, float ca, float off, Vector3 scale, float removeDof, Vector3 locoff) { p = tm.MultiplyPoint3x4(p); p.z += off; p.x *= scale.x; p.y *= scale.y; p.z *= scale.z; p += locoff; float alpha = (p.z * LayerLength) + percent; if (useCrossCrv) { ca += CrossCrv.Evaluate(alpha); if (ca < 0.0f) { ca = 0.0f; } if (ca > 0.999f) { ca = 0.999f; } } Vector3 ps1; Vector3 ps; if (CalcUp) { Vector3 newup; ps = layer.GetPosAndUp(loft, ca, alpha, 0.1f, out ps1, out newup); //newup = surfacetolofttm.MultiplyVector(newup); // May need this back in //if ( path.splines[0].closed ) alpha = Mathf.Repeat(alpha, 1.0f); if (calcUpAmount < 0.999f) { newup = Vector3.Lerp(Vector3.up, newup, calcUpAmount); } Quaternion uprot = Quaternion.FromToRotation(Vector3.up, newup); if (useTwistCrv) { tw = uprot * Quaternion.AngleAxis(twist * twistCrv.Evaluate(alpha), Vector3.forward); } else { tw = uprot; } } else { ps = layer.GetPosAndLook(loft, ca, alpha, 0.1f, out ps1); alpha = Mathf.Repeat(alpha, 1.0f); if (useTwistCrv) { tw = Quaternion.AngleAxis(twist * twistCrv.Evaluate(alpha), Vector3.forward); } } Vector3 relativePos = ps1 - ps; relativePos.y *= removeDof; Quaternion rotation = tw * Quaternion.LookRotation(relativePos); //wtm.SetTRS(ps, rotation, Vector3.one); MegaMatrix.SetTR(ref wtm, ps, rotation); wtm = mat * wtm; p.z = 0.0f; return(wtm.MultiplyPoint3x4(p)); }
Vector3 DeformOld(Vector3 p, MegaShapeLoft loft, MegaLoftLayerSimple layer, float percent, float ca, float off, Vector3 scale, float removeDof, Vector3 locoff) { p = tm.MultiplyPoint3x4(p); p.z += off; p.x *= scale.x; p.y *= scale.y; p.z *= scale.z; p += locoff; float alpha = (p.z * LayerLength) + percent; if ( useCrossCrv ) { ca += CrossCrv.Evaluate(alpha); if ( ca < 0.0f ) ca = 0.0f; if ( ca > 0.999f ) ca = 0.999f; } Vector3 ps1; Vector3 ps; if ( CalcUp ) { Vector3 newup; ps = layer.GetPosAndUp(loft, ca, alpha, 0.1f, out ps1, out newup); //newup = surfacetolofttm.MultiplyVector(newup); // May need this back in //if ( path.splines[0].closed ) alpha = Mathf.Repeat(alpha, 1.0f); if ( calcUpAmount < 0.999f ) newup = Vector3.Lerp(Vector3.up, newup, calcUpAmount); Quaternion uprot = Quaternion.FromToRotation(Vector3.up, newup); if ( useTwistCrv ) tw = uprot * Quaternion.AngleAxis(twist * twistCrv.Evaluate(alpha), Vector3.forward); else tw = uprot; } else { ps = layer.GetPosAndLook(loft, ca, alpha, 0.1f, out ps1); alpha = Mathf.Repeat(alpha, 1.0f); if ( useTwistCrv ) tw = Quaternion.AngleAxis(twist * twistCrv.Evaluate(alpha), Vector3.forward); } Vector3 relativePos = ps1 - ps; relativePos.y *= removeDof; Quaternion rotation = tw * Quaternion.LookRotation(relativePos); //wtm.SetTRS(ps, rotation, Vector3.one); MegaMatrix.SetTR(ref wtm, ps, rotation); wtm = mat * wtm; p.z = 0.0f; return wtm.MultiplyPoint3x4(p); }