mirror of
https://github.com/JulianGro/overte.git
synced 2025-04-26 02:15:08 +02:00
Properly convert from absolute rig frame to relative geom frame
This commit is contained in:
parent
36c175d4cc
commit
d86a608825
1 changed files with 14 additions and 4 deletions
|
@ -1236,14 +1236,17 @@ void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) {
|
||||||
|
|
||||||
if (_animSkeleton) {
|
if (_animSkeleton) {
|
||||||
|
|
||||||
|
// transform all the default poses into rig space.
|
||||||
|
const AnimPose geometryToRigPose(_geometryToRigTransform);
|
||||||
std::vector<bool> overrideFlags(_internalPoseSet._overridePoses.size(), false);
|
std::vector<bool> overrideFlags(_internalPoseSet._overridePoses.size(), false);
|
||||||
AnimPoseVec overridePoses = _animSkeleton->getAbsoluteDefaultPoses(); // start with the default poses.
|
AnimPoseVec overridePoses = _animSkeleton->getAbsoluteDefaultPoses(); // start with the default poses.
|
||||||
for (int i = 0; i < overridePoses.size(); i++) {
|
for (auto& pose : overridePoses) {
|
||||||
overridePoses[i] = AnimPose(_geometryToRigTransform) * overridePoses[i];
|
pose = geometryToRigPose * pose;
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(overrideFlags.size() == overridePoses.size());
|
ASSERT(overrideFlags.size() == overridePoses.size());
|
||||||
|
|
||||||
|
// copy over data from the jointDataVec, which is also in rig space.
|
||||||
for (int i = 0; i < jointDataVec.size(); i++) {
|
for (int i = 0; i < jointDataVec.size(); i++) {
|
||||||
if (isIndexValid(i)) {
|
if (isIndexValid(i)) {
|
||||||
const JointData& data = jointDataVec.at(i);
|
const JointData& data = jointDataVec.at(i);
|
||||||
|
@ -1260,13 +1263,20 @@ void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) {
|
||||||
|
|
||||||
ASSERT(_internalPoseSet._overrideFlags.size() == _internalPoseSet._overridePoses.size());
|
ASSERT(_internalPoseSet._overrideFlags.size() == _internalPoseSet._overridePoses.size());
|
||||||
|
|
||||||
|
// convert resulting poses into geometry space.
|
||||||
|
const AnimPose rigToGeometryPose(_rigToGeometryTransform);
|
||||||
|
for (auto& pose : overridePoses) {
|
||||||
|
pose = rigToGeometryPose * pose;
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert all poses from absolute to parent relative.
|
||||||
_animSkeleton->convertAbsolutePosesToRelative(overridePoses);
|
_animSkeleton->convertAbsolutePosesToRelative(overridePoses);
|
||||||
|
|
||||||
AnimPose rigToGeometryPose(_rigToGeometryTransform);
|
// copy the geometry space parent relative poses into _overridePoses
|
||||||
for (int i = 0; i < jointDataVec.size(); i++) {
|
for (int i = 0; i < jointDataVec.size(); i++) {
|
||||||
if (overrideFlags[i]) {
|
if (overrideFlags[i]) {
|
||||||
_internalPoseSet._overrideFlags[i] = true;
|
_internalPoseSet._overrideFlags[i] = true;
|
||||||
_internalPoseSet._overridePoses[i] = rigToGeometryPose * overridePoses[i];
|
_internalPoseSet._overridePoses[i] = overridePoses[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue