mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-18 21:48:48 +02:00
65 lines
2.1 KiB
C++
65 lines
2.1 KiB
C++
//
|
|
// IKTarget.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_IKTarget_h
|
|
#define hifi_IKTarget_h
|
|
|
|
#include "AnimSkeleton.h"
|
|
|
|
const float HACK_HMD_TARGET_WEIGHT = 8.0f;
|
|
|
|
class IKTarget {
|
|
public:
|
|
enum class Type {
|
|
RotationAndPosition,
|
|
RotationOnly,
|
|
HmdHead,
|
|
HipsRelativeRotationAndPosition,
|
|
Spline,
|
|
Unknown
|
|
};
|
|
|
|
IKTarget() {}
|
|
|
|
const glm::vec3& getTranslation() const { return _pose.trans(); }
|
|
const glm::quat& getRotation() const { return _pose.rot(); }
|
|
const AnimPose& getPose() const { return _pose; }
|
|
glm::vec3 getPoleVector() const { return _poleVector; }
|
|
glm::vec3 getPoleReferenceVector() const { return _poleReferenceVector; }
|
|
bool getPoleVectorEnabled() const { return _poleVectorEnabled; }
|
|
int getIndex() const { return _index; }
|
|
Type getType() const { return _type; }
|
|
|
|
void setPose(const glm::quat& rotation, const glm::vec3& translation);
|
|
void setPoleVector(const glm::vec3& poleVector) { _poleVector = poleVector; }
|
|
void setPoleReferenceVector(const glm::vec3& poleReferenceVector) { _poleReferenceVector = poleReferenceVector; }
|
|
void setPoleVectorEnabled(bool poleVectorEnabled) { _poleVectorEnabled = poleVectorEnabled; }
|
|
void setIndex(int index) { _index = index; }
|
|
void setType(int);
|
|
void setFlexCoefficients(size_t numFlexCoefficientsIn, const float* flexCoefficientsIn);
|
|
float getFlexCoefficient(size_t chainDepth) const;
|
|
|
|
void setWeight(float weight) { _weight = weight; }
|
|
float getWeight() const { return _weight; }
|
|
|
|
enum FlexCoefficients { MAX_FLEX_COEFFICIENTS = 10 };
|
|
|
|
private:
|
|
AnimPose _pose;
|
|
glm::vec3 _poleVector;
|
|
glm::vec3 _poleReferenceVector;
|
|
bool _poleVectorEnabled { false };
|
|
int _index { -1 };
|
|
Type _type { Type::Unknown };
|
|
float _weight { 0.0f };
|
|
float _flexCoefficients[MAX_FLEX_COEFFICIENTS];
|
|
size_t _numFlexCoefficients;
|
|
};
|
|
|
|
#endif // hifi_IKTarget_h
|