diff --git a/libraries/animation/src/RotationAccumulator.cpp b/libraries/animation/src/RotationAccumulator.cpp index 22b84afc77..fccb63fa35 100644 --- a/libraries/animation/src/RotationAccumulator.cpp +++ b/libraries/animation/src/RotationAccumulator.cpp @@ -11,19 +11,18 @@ #include -glm::quat RotationAccumulator::getAverage() { - glm::quat average; - uint32_t numRotations = _rotations.size(); - if (numRotations > 0) { - average = _rotations[0]; - for (uint32_t i = 1; i < numRotations; ++i) { - glm::quat rotation = _rotations[i]; - if (glm::dot(average, rotation) < 0.0f) { - rotation = -rotation; - } - average += rotation; +void RotationAccumulator::add(glm::quat rotation) { + if (_numRotations == 0) { + _rotationSum = rotation; + } else { + if (glm::dot(_rotationSum, rotation) < 0.0f) { + rotation = -rotation; } - average = glm::normalize(average); + _rotationSum += rotation; } - return average; + ++_numRotations; +} + +glm::quat RotationAccumulator::getAverage() { + return (_numRotations > 0) ? glm::normalize(_rotationSum) : glm::quat(); } diff --git a/libraries/animation/src/RotationAccumulator.h b/libraries/animation/src/RotationAccumulator.h index d6854d9b01..500f554271 100644 --- a/libraries/animation/src/RotationAccumulator.h +++ b/libraries/animation/src/RotationAccumulator.h @@ -10,25 +10,21 @@ #ifndef hifi_RotationAccumulator_h #define hifi_RotationAccumulator_h -#include - #include -#include class RotationAccumulator { public: - RotationAccumulator() {} + int size() const { return _numRotations; } - uint32_t size() const { return _rotations.size(); } - - void add(const glm::quat& rotation) { _rotations.push_back(rotation); } + void add(glm::quat rotation); glm::quat getAverage(); - void clear() { _rotations.clear(); } + void clear() { _numRotations = 0; } private: - std::vector _rotations; + glm::quat _rotationSum; + int _numRotations = 0; }; #endif // hifi_RotationAccumulator_h