mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-23 11:09:13 +02:00
53 lines
1.5 KiB
C++
53 lines
1.5 KiB
C++
//
|
|
// IKTarget.cpp
|
|
//
|
|
// 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 "IKTarget.h"
|
|
|
|
void IKTarget::setPose(const glm::quat& rotation, const glm::vec3& translation) {
|
|
_pose.rot() = rotation;
|
|
_pose.trans() = translation;
|
|
}
|
|
|
|
void IKTarget::setFlexCoefficients(size_t numFlexCoefficientsIn, const float* flexCoefficientsIn) {
|
|
_numFlexCoefficients = std::min(numFlexCoefficientsIn, (size_t)MAX_FLEX_COEFFICIENTS);
|
|
for (size_t i = 0; i < _numFlexCoefficients; i++) {
|
|
_flexCoefficients[i] = flexCoefficientsIn[i];
|
|
}
|
|
}
|
|
|
|
float IKTarget::getFlexCoefficient(size_t chainDepth) const {
|
|
const float DEFAULT_FLEX_COEFFICIENT = 0.5f;
|
|
if (chainDepth < _numFlexCoefficients) {
|
|
return _flexCoefficients[chainDepth];
|
|
} else {
|
|
return DEFAULT_FLEX_COEFFICIENT;
|
|
}
|
|
}
|
|
|
|
void IKTarget::setType(int type) {
|
|
switch (type) {
|
|
case (int)Type::RotationAndPosition:
|
|
_type = Type::RotationAndPosition;
|
|
break;
|
|
case (int)Type::RotationOnly:
|
|
_type = Type::RotationOnly;
|
|
break;
|
|
case (int)Type::HmdHead:
|
|
_type = Type::HmdHead;
|
|
break;
|
|
case (int)Type::HipsRelativeRotationAndPosition:
|
|
_type = Type::HipsRelativeRotationAndPosition;
|
|
break;
|
|
case (int)Type::Spline:
|
|
_type = Type::Spline;
|
|
break;
|
|
default:
|
|
_type = Type::Unknown;
|
|
}
|
|
}
|