From b6a153d92690a9a2b19f1adfd23ffb61d85b83c1 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Thu, 17 Sep 2015 22:30:44 -0700 Subject: [PATCH] split RotationAccumulator into its own files --- .../animation/src/AnimInverseKinematics.h | 36 +++---------------- .../animation/src/RotationAccumulator.cpp | 29 +++++++++++++++ libraries/animation/src/RotationAccumulator.h | 34 ++++++++++++++++++ 3 files changed, 68 insertions(+), 31 deletions(-) create mode 100644 libraries/animation/src/RotationAccumulator.cpp create mode 100644 libraries/animation/src/RotationAccumulator.h diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index ae8ab34bdc..c4bda1be89 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -12,41 +12,15 @@ #include +#include +#include + #include "AnimNode.h" +#include "RotationAccumulator.h" + class RotationConstraint; -class RotationAccumulator { -public: - RotationAccumulator() {} - - uint32_t size() const { return _rotations.size(); } - - void add(const glm::quat& rotation) { _rotations.push_back(rotation); } - - glm::quat 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; - } - average = glm::normalize(average); - } - return average; - } - - void clear() { _rotations.clear(); } - -private: - std::vector _rotations; -}; - class AnimInverseKinematics : public AnimNode { public: diff --git a/libraries/animation/src/RotationAccumulator.cpp b/libraries/animation/src/RotationAccumulator.cpp new file mode 100644 index 0000000000..22b84afc77 --- /dev/null +++ b/libraries/animation/src/RotationAccumulator.cpp @@ -0,0 +1,29 @@ +// +// RotationAccumulator.h +// +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "RotationAccumulator.h" + +#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; + } + average = glm::normalize(average); + } + return average; +} diff --git a/libraries/animation/src/RotationAccumulator.h b/libraries/animation/src/RotationAccumulator.h new file mode 100644 index 0000000000..d6854d9b01 --- /dev/null +++ b/libraries/animation/src/RotationAccumulator.h @@ -0,0 +1,34 @@ +// +// RotationAccumulator.h +// +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_RotationAccumulator_h +#define hifi_RotationAccumulator_h + +#include + +#include +#include + +class RotationAccumulator { +public: + RotationAccumulator() {} + + uint32_t size() const { return _rotations.size(); } + + void add(const glm::quat& rotation) { _rotations.push_back(rotation); } + + glm::quat getAverage(); + + void clear() { _rotations.clear(); } + +private: + std::vector _rotations; +}; + +#endif // hifi_RotationAccumulator_h