mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 13:38:02 +02:00
give other avatars an anim-skeleton
This commit is contained in:
parent
a70ba4cd5a
commit
4903db45b1
5 changed files with 19 additions and 7 deletions
|
@ -70,6 +70,9 @@ void AvatarActionHold::updateActionWorker(float deltaTimeStep) {
|
||||||
gotLock = withTryWriteLock([&]{
|
gotLock = withTryWriteLock([&]{
|
||||||
_positionalTarget = position;
|
_positionalTarget = position;
|
||||||
_rotationalTarget = rotation;
|
_rotationalTarget = rotation;
|
||||||
|
_positionalTargetSet = true;
|
||||||
|
_rotationalTargetSet = true;
|
||||||
|
_active = true;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (gotLock) {
|
if (gotLock) {
|
||||||
|
|
|
@ -229,6 +229,12 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) {
|
||||||
|
|
||||||
Model::simulate(deltaTime, fullUpdate);
|
Model::simulate(deltaTime, fullUpdate);
|
||||||
|
|
||||||
|
// let rig compute the model offset
|
||||||
|
glm::vec3 modelOffset;
|
||||||
|
if (_rig->getModelOffset(modelOffset)) {
|
||||||
|
setOffset(modelOffset);
|
||||||
|
}
|
||||||
|
|
||||||
if (!isActive() || !_owningAvatar->isMyAvatar()) {
|
if (!isActive() || !_owningAvatar->isMyAvatar()) {
|
||||||
return; // only simulate for own avatar
|
return; // only simulate for own avatar
|
||||||
}
|
}
|
||||||
|
@ -246,12 +252,6 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) {
|
||||||
Hand* hand = _owningAvatar->getHand();
|
Hand* hand = _owningAvatar->getHand();
|
||||||
hand->getLeftRightPalmIndices(leftPalmIndex, rightPalmIndex);
|
hand->getLeftRightPalmIndices(leftPalmIndex, rightPalmIndex);
|
||||||
|
|
||||||
// let rig compute the model offset
|
|
||||||
glm::vec3 modelOffset;
|
|
||||||
if (_rig->getModelOffset(modelOffset)) {
|
|
||||||
setOffset(modelOffset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Don't Relax toward hand positions when in animGraph mode.
|
// Don't Relax toward hand positions when in animGraph mode.
|
||||||
if (!_rig->getEnableAnimGraph()) {
|
if (!_rig->getEnableAnimGraph()) {
|
||||||
const float HAND_RESTORATION_RATE = 0.25f;
|
const float HAND_RESTORATION_RATE = 0.25f;
|
||||||
|
|
|
@ -1245,12 +1245,18 @@ void Rig::updateFromHandParameters(const HandParameters& params, float dt) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Rig::makeAnimSkeleton(const FBXGeometry& fbxGeometry) {
|
||||||
|
if (!_animSkeleton) {
|
||||||
|
_animSkeleton = std::make_shared<AnimSkeleton>(fbxGeometry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Rig::initAnimGraph(const QUrl& url, const FBXGeometry& fbxGeometry) {
|
void Rig::initAnimGraph(const QUrl& url, const FBXGeometry& fbxGeometry) {
|
||||||
if (!_enableAnimGraph) {
|
if (!_enableAnimGraph) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
_animSkeleton = std::make_shared<AnimSkeleton>(fbxGeometry);
|
makeAnimSkeleton(fbxGeometry);
|
||||||
|
|
||||||
// load the anim graph
|
// load the anim graph
|
||||||
_animLoader.reset(new AnimNodeLoader(url));
|
_animLoader.reset(new AnimNodeLoader(url));
|
||||||
|
|
|
@ -193,6 +193,7 @@ public:
|
||||||
virtual void setHandPosition(int jointIndex, const glm::vec3& position, const glm::quat& rotation,
|
virtual void setHandPosition(int jointIndex, const glm::vec3& position, const glm::quat& rotation,
|
||||||
float scale, float priority) = 0;
|
float scale, float priority) = 0;
|
||||||
|
|
||||||
|
void makeAnimSkeleton(const FBXGeometry& fbxGeometry);
|
||||||
void initAnimGraph(const QUrl& url, const FBXGeometry& fbxGeometry);
|
void initAnimGraph(const QUrl& url, const FBXGeometry& fbxGeometry);
|
||||||
|
|
||||||
AnimNode::ConstPointer getAnimNode() const { return _animNode; }
|
AnimNode::ConstPointer getAnimNode() const { return _animNode; }
|
||||||
|
|
|
@ -1147,6 +1147,8 @@ void Model::segregateMeshGroups() {
|
||||||
const FBXGeometry& geometry = _geometry->getFBXGeometry();
|
const FBXGeometry& geometry = _geometry->getFBXGeometry();
|
||||||
const std::vector<std::unique_ptr<NetworkMesh>>& networkMeshes = _geometry->getMeshes();
|
const std::vector<std::unique_ptr<NetworkMesh>>& networkMeshes = _geometry->getMeshes();
|
||||||
|
|
||||||
|
_rig->makeAnimSkeleton(geometry);
|
||||||
|
|
||||||
// all of our mesh vectors must match in size
|
// all of our mesh vectors must match in size
|
||||||
if ((int)networkMeshes.size() != geometry.meshes.size() ||
|
if ((int)networkMeshes.size() != geometry.meshes.size() ||
|
||||||
geometry.meshes.size() != _meshStates.size()) {
|
geometry.meshes.size() != _meshStates.size()) {
|
||||||
|
|
Loading…
Reference in a new issue