mirror of
https://github.com/overte-org/overte.git
synced 2025-08-06 18:00:41 +02:00
AnimSkeleton: Added getPre and Post rotation accessors
This commit is contained in:
parent
b55856da08
commit
1bdeeeceeb
2 changed files with 24 additions and 6 deletions
|
@ -59,8 +59,14 @@ const AnimPose& AnimSkeleton::getAbsoluteDefaultPose(int jointIndex) const {
|
||||||
return _absoluteDefaultPoses[jointIndex];
|
return _absoluteDefaultPoses[jointIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
const glm::quat AnimSkeleton::getPreRotation(int jointIndex) const {
|
// get pre multiplied transform which should include FBX pre potations
|
||||||
return _joints[jointIndex].preRotation;
|
const AnimPose& AnimSkeleton::getPreRotationPose(int jointIndex) const {
|
||||||
|
return _relativePreRotationPoses[jointIndex];
|
||||||
|
}
|
||||||
|
|
||||||
|
// get post multiplied transform which might include FBX offset transformations
|
||||||
|
const AnimPose& AnimSkeleton::getPostRotationPose(int jointIndex) const {
|
||||||
|
return _relativePostRotationPoses[jointIndex];
|
||||||
}
|
}
|
||||||
|
|
||||||
int AnimSkeleton::getParentIndex(int jointIndex) const {
|
int AnimSkeleton::getParentIndex(int jointIndex) const {
|
||||||
|
@ -99,13 +105,20 @@ void AnimSkeleton::buildSkeletonFromJoints(const std::vector<FBXJoint>& joints)
|
||||||
// build a chache of default poses
|
// build a chache of default poses
|
||||||
_absoluteDefaultPoses.reserve(joints.size());
|
_absoluteDefaultPoses.reserve(joints.size());
|
||||||
_relativeDefaultPoses.reserve(joints.size());
|
_relativeDefaultPoses.reserve(joints.size());
|
||||||
|
_relativePreRotationPoses.reserve(joints.size());
|
||||||
|
_relativePostRotationPoses.reserve(joints.size());
|
||||||
|
|
||||||
// iterate over FBXJoints and extract the bind pose information.
|
// iterate over FBXJoints and extract the bind pose information.
|
||||||
for (int i = 0; i < (int)joints.size(); i++) {
|
for (int i = 0; i < (int)joints.size(); i++) {
|
||||||
|
|
||||||
|
// build pre and post transforms
|
||||||
|
glm::mat4 preRotationTransform = _joints[i].preTransform * glm::mat4_cast(_joints[i].preRotation);
|
||||||
|
glm::mat4 postRotationTransform = glm::mat4_cast(_joints[i].postRotation) * _joints[i].postTransform;
|
||||||
|
_relativePreRotationPoses.push_back(AnimPose(preRotationTransform));
|
||||||
|
_relativePostRotationPoses.push_back(AnimPose(postRotationTransform));
|
||||||
|
|
||||||
// build relative and absolute default poses
|
// build relative and absolute default poses
|
||||||
glm::mat4 rotTransform = glm::mat4_cast(_joints[i].preRotation * _joints[i].rotation * _joints[i].postRotation);
|
glm::mat4 relDefaultMat = glm::translate(_joints[i].translation) * preRotationTransform * glm::mat4_cast(_joints[i].rotation) * postRotationTransform;
|
||||||
glm::mat4 relDefaultMat = glm::translate(_joints[i].translation) * _joints[i].preTransform * rotTransform * _joints[i].postTransform;
|
|
||||||
AnimPose relDefaultPose(relDefaultMat);
|
AnimPose relDefaultPose(relDefaultMat);
|
||||||
_relativeDefaultPoses.push_back(relDefaultPose);
|
_relativeDefaultPoses.push_back(relDefaultPose);
|
||||||
int parentIndex = getParentIndex(i);
|
int parentIndex = getParentIndex(i);
|
||||||
|
|
|
@ -42,8 +42,11 @@ public:
|
||||||
const AnimPose& getAbsoluteDefaultPose(int jointIndex) const;
|
const AnimPose& getAbsoluteDefaultPose(int jointIndex) const;
|
||||||
const AnimPoseVec& getAbsoluteDefaultPoses() const { return _absoluteDefaultPoses; }
|
const AnimPoseVec& getAbsoluteDefaultPoses() const { return _absoluteDefaultPoses; }
|
||||||
|
|
||||||
// get pre-rotation aka Maya's joint orientation.
|
// get pre transform which should include FBX pre potations
|
||||||
const glm::quat getPreRotation(int jointIndex) const;
|
const AnimPose& getPreRotationPose(int jointIndex) const;
|
||||||
|
|
||||||
|
// get post transform which might include FBX offset transformations
|
||||||
|
const AnimPose& getPostRotationPose(int jointIndex) const;
|
||||||
|
|
||||||
int getParentIndex(int jointIndex) const;
|
int getParentIndex(int jointIndex) const;
|
||||||
|
|
||||||
|
@ -64,6 +67,8 @@ protected:
|
||||||
AnimPoseVec _relativeBindPoses;
|
AnimPoseVec _relativeBindPoses;
|
||||||
AnimPoseVec _relativeDefaultPoses;
|
AnimPoseVec _relativeDefaultPoses;
|
||||||
AnimPoseVec _absoluteDefaultPoses;
|
AnimPoseVec _absoluteDefaultPoses;
|
||||||
|
AnimPoseVec _relativePreRotationPoses;
|
||||||
|
AnimPoseVec _relativePostRotationPoses;
|
||||||
|
|
||||||
// no copies
|
// no copies
|
||||||
AnimSkeleton(const AnimSkeleton&) = delete;
|
AnimSkeleton(const AnimSkeleton&) = delete;
|
||||||
|
|
Loading…
Reference in a new issue