mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-09 10:58:22 +02:00
other avatars use jointData no Rig animation
This commit is contained in:
parent
b586926d09
commit
a55ab94cd9
4 changed files with 12 additions and 2 deletions
|
@ -348,6 +348,8 @@ void Avatar::simulate(float deltaTime, bool inView) {
|
||||||
PROFILE_RANGE(simulation, "updateJoints");
|
PROFILE_RANGE(simulation, "updateJoints");
|
||||||
if (inView && _hasNewJointData) {
|
if (inView && _hasNewJointData) {
|
||||||
_skeletonModel->getRig()->copyJointsFromJointData(_jointData);
|
_skeletonModel->getRig()->copyJointsFromJointData(_jointData);
|
||||||
|
glm::mat4 rootTransform = glm::scale(_skeletonModel->getScale()) * glm::translate(_skeletonModel->getOffset());
|
||||||
|
_skeletonModel->getRig()->computeExternalPoses(rootTransform);
|
||||||
_jointDataSimulationRate.increment();
|
_jointDataSimulationRate.increment();
|
||||||
|
|
||||||
_skeletonModel->simulate(deltaTime, true);
|
_skeletonModel->simulate(deltaTime, true);
|
||||||
|
|
|
@ -179,7 +179,9 @@ void SkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
|
||||||
|
|
||||||
_rig->updateFromEyeParameters(eyeParams);
|
_rig->updateFromEyeParameters(eyeParams);
|
||||||
} else {
|
} else {
|
||||||
Model::updateRig(deltaTime, parentTransform);
|
// no need to call Model::updateRig() because otherAvatars get their joint state
|
||||||
|
// copied directly from AvtarData::_jointData (there are no Rig animations to blend)
|
||||||
|
_needsUpdateClusterMatrices = true;
|
||||||
|
|
||||||
// This is a little more work than we really want.
|
// This is a little more work than we really want.
|
||||||
//
|
//
|
||||||
|
|
|
@ -1346,8 +1346,13 @@ void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) {
|
||||||
_internalPoseSet._relativePoses[i].trans() = relativeDefaultPoses[i].trans();
|
_internalPoseSet._relativePoses[i].trans() = relativeDefaultPoses[i].trans();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Rig::computeExternalPoses(const glm::mat4& modelOffsetMat) {
|
||||||
|
_modelOffset = AnimPose(modelOffsetMat);
|
||||||
|
_geometryToRigTransform = _modelOffset * _geometryOffset;
|
||||||
|
_rigToGeometryTransform = glm::inverse(_geometryToRigTransform);
|
||||||
|
|
||||||
// build absolute poses and copy to externalPoseSet
|
|
||||||
buildAbsoluteRigPoses(_internalPoseSet._relativePoses, _internalPoseSet._absolutePoses);
|
buildAbsoluteRigPoses(_internalPoseSet._relativePoses, _internalPoseSet._absolutePoses);
|
||||||
QWriteLocker writeLock(&_externalPoseSetLock);
|
QWriteLocker writeLock(&_externalPoseSetLock);
|
||||||
_externalPoseSet = _internalPoseSet;
|
_externalPoseSet = _internalPoseSet;
|
||||||
|
|
|
@ -210,6 +210,7 @@ public:
|
||||||
|
|
||||||
void copyJointsIntoJointData(QVector<JointData>& jointDataVec) const;
|
void copyJointsIntoJointData(QVector<JointData>& jointDataVec) const;
|
||||||
void copyJointsFromJointData(const QVector<JointData>& jointDataVec);
|
void copyJointsFromJointData(const QVector<JointData>& jointDataVec);
|
||||||
|
void computeExternalPoses(const glm::mat4& modelOffsetMat);
|
||||||
|
|
||||||
void computeAvatarBoundingCapsule(const FBXGeometry& geometry, float& radiusOut, float& heightOut, glm::vec3& offsetOut) const;
|
void computeAvatarBoundingCapsule(const FBXGeometry& geometry, float& radiusOut, float& heightOut, glm::vec3& offsetOut) const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue