Commit: 4db7842a72cc2f9cdca31c08d45c703ad8519dc0
Author: Campbell Barton
Date:   Tue Mar 19 17:39:14 2019 +1100
Branches: master
https://developer.blender.org/rB4db7842a72cc2f9cdca31c08d45c703ad8519dc0

BLI_math: use fallback for compatible quaternion calculation

Copy the new value when the compatible quaternion isn't usable.

===================================================================

M       source/blender/blenlib/intern/math_rotation.c

===================================================================

diff --git a/source/blender/blenlib/intern/math_rotation.c 
b/source/blender/blenlib/intern/math_rotation.c
index d52c8f54096..5f6bbcce3b3 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -207,14 +207,20 @@ void pow_qt_fl_normalized(float q[4], const float fac)
  */
 void quat_to_compatible_quat(float q[4], const float a[4], const float old[4])
 {
+       const float eps = 1e-4f;
        BLI_ASSERT_UNIT_QUAT(a);
-       float delta[4];
        float old_unit[4];
-       normalize_qt_qt(old_unit, old);
-       rotation_between_quats_to_quat(delta, old_unit, a);
-       mul_qt_qtqt(q, old, delta);
-       if ((q[0] < 0.0f) != (old[0] < 0.0f)) {
-               negate_v4(q);
+       /* Skips `!finite_v4(old)` case too. */
+       if (normalize_qt_qt(old_unit, old) > eps) {
+               float delta[4];
+               rotation_between_quats_to_quat(delta, old_unit, a);
+               mul_qt_qtqt(q, old, delta);
+               if ((q[0] < 0.0f) != (old[0] < 0.0f)) {
+                       negate_v4(q);
+               }
+       }
+       else {
+               copy_qt_qt(q, a);
        }
 }

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to