diff --git a/libraries/animation/src/RotationAccumulator.cpp b/libraries/animation/src/RotationAccumulator.cpp index fccb63fa35..b3ec790d20 100644 --- a/libraries/animation/src/RotationAccumulator.cpp +++ b/libraries/animation/src/RotationAccumulator.cpp @@ -12,14 +12,12 @@ #include void RotationAccumulator::add(glm::quat rotation) { - if (_numRotations == 0) { - _rotationSum = rotation; - } else { - if (glm::dot(_rotationSum, rotation) < 0.0f) { - rotation = -rotation; - } - _rotationSum += rotation; + // make sure both quaternions are on the same hyper-hemisphere before we add them + if (glm::dot(_rotationSum, rotation) < 0.0f) { + rotation = -rotation; } + // sum the rotation linearly (lerp) + _rotationSum += rotation; ++_numRotations; } diff --git a/libraries/animation/src/RotationAccumulator.h b/libraries/animation/src/RotationAccumulator.h index 500f554271..bb30c14363 100644 --- a/libraries/animation/src/RotationAccumulator.h +++ b/libraries/animation/src/RotationAccumulator.h @@ -14,6 +14,8 @@ class RotationAccumulator { public: + RotationAccumulator() : _rotationSum(0.0f, 0.0f, 0.0f, 0.0f), _numRotations(0) { } + int size() const { return _numRotations; } void add(glm::quat rotation); @@ -24,7 +26,7 @@ public: private: glm::quat _rotationSum; - int _numRotations = 0; + int _numRotations; }; #endif // hifi_RotationAccumulator_h