No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

QuaternionUtils.cs 1.2KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. using UnityEngine;
  2. namespace Timeline.Samples
  3. {
  4. public static class QuaternionUtils
  5. {
  6. const float k_FloatMin = 1e-10f;
  7. public static readonly Quaternion zero = new Quaternion(0f, 0f, 0f, 0f);
  8. public static Quaternion Scale(this Quaternion q, float scale)
  9. {
  10. return new Quaternion(q.x * scale, q.y * scale, q.z * scale, q.w * scale);
  11. }
  12. public static Quaternion NormalizeSafe(this Quaternion q)
  13. {
  14. float dot = Quaternion.Dot(q, q);
  15. if (dot > k_FloatMin)
  16. {
  17. float rsqrt = 1.0f / Mathf.Sqrt(dot);
  18. return new Quaternion(q.x * rsqrt, q.y * rsqrt, q.z * rsqrt, q.w * rsqrt);
  19. }
  20. return Quaternion.identity;
  21. }
  22. public static Quaternion Blend(this Quaternion q1, Quaternion q2, float weight)
  23. {
  24. return q1.Add(q2.Scale(weight));
  25. }
  26. public static Quaternion Add(this Quaternion rhs, Quaternion lhs)
  27. {
  28. float sign = Mathf.Sign(Quaternion.Dot(rhs, lhs));
  29. return new Quaternion(rhs.x + sign * lhs.x, rhs.y + sign * lhs.y, rhs.z + sign * lhs.z, rhs.w + sign * lhs.w);
  30. }
  31. }
  32. }