From 186fd4238f9790bbe1a43e37b86b51ba2dc6bca5 Mon Sep 17 00:00:00 2001 From: Mamadou Babaei Date: Fri, 24 Feb 2023 01:49:03 +0100 Subject: [PATCH] apply the transform to the output pose --- .../SGVirtualHandAnimInstanceProxy.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/Source/SenseGlove/Private/SenseGlove/Animation/SGVirtualHandAnimInstanceProxy.cpp b/Source/SenseGlove/Private/SenseGlove/Animation/SGVirtualHandAnimInstanceProxy.cpp index 8eecff17..bfd207b8 100644 --- a/Source/SenseGlove/Private/SenseGlove/Animation/SGVirtualHandAnimInstanceProxy.cpp +++ b/Source/SenseGlove/Private/SenseGlove/Animation/SGVirtualHandAnimInstanceProxy.cpp @@ -152,11 +152,17 @@ void FSGVirtualHandAnimInstanceProxy::PreEvaluateAnimation(UAnimInstance* InAnim } FRotator JointRotation{FingerJointRotations[JointIndex]}; + /*const FRotator JointRotation{FingerJointRotations[JointIndex]}; + const FQuat JointQuat{JointRotation.Quaternion()}; + const FRotator ReferenceRotation{Hand->GetActorRotation()}; + const FQuat ReferenceQuat{ReferenceRotation.Quaternion()}; + FRotator BoneRotation{ReferenceQuat * JointQuat};*/ FName BoneName(Hand->IsRight() ? GetRightHandBoneName(FingerIndex, JointIndex) : GetLeftHandBoneName(FingerIndex, JointIndex)); + //BoneMap.Emplace(MoveTemp(BoneName), MoveTemp(BoneRotation)); BoneMap.Emplace(MoveTemp(BoneName), MoveTemp(JointRotation)); } } @@ -207,6 +213,7 @@ bool FSGVirtualHandAnimInstanceProxy::Evaluate(FPoseContext& Output) FAnimNode_ModifyBone BoneController; BoneController.BoneToModify = MoveTemp(BoneReference); BoneController.RotationMode = EBoneModificationMode::BMM_Replace; + //BoneController.RotationSpace = EBoneControlSpace::BCS_WorldSpace; BoneController.RotationSpace = EBoneControlSpace::BCS_ComponentSpace; BoneController.Rotation = MoveTemp(BoneRotation); @@ -218,9 +225,12 @@ bool FSGVirtualHandAnimInstanceProxy::Evaluate(FPoseContext& Output) const TArray::SizeType BoneTransformsNum = BoneTransforms.Num(); if (BoneTransformsNum > 0) { - const FCompactPoseBoneIndex PoseBoneIndex{static_cast(BoneIndex)}; + const FCompactPoseBoneIndex PoseBoneIndex{ + BoneController.BoneToModify.GetCompactPoseIndex( + PoseContext.Pose.GetPose().GetBoneContainer()) + }; const FTransform BoneTransformBefore{PoseContext.Pose.GetComponentSpaceTransform(PoseBoneIndex)}; - PoseContext.Pose.SetComponentSpaceTransform(PoseBoneIndex, BoneTransforms[0].Transform); + PoseContext.Pose.LocalBlendCSBoneTransforms(BoneTransforms, 1.0f); const FTransform BoneTransformAfter{PoseContext.Pose.GetComponentSpaceTransform(PoseBoneIndex)}; SGLOG("BoneController.Rotation", BoneController.Rotation); @@ -228,6 +238,10 @@ bool FSGVirtualHandAnimInstanceProxy::Evaluate(FPoseContext& Output) SGLOG("BoneTransformBefore.Rotation", BoneTransformBefore.Rotator()); SGLOG("BoneTransformAfter.Rotation", BoneTransformAfter.Rotator()); + // Output.Pose[PoseBoneIndex].SetRotation( + // PoseContext.Pose.GetComponentSpaceTransform(PoseBoneIndex).GetRotation()); + PoseContext.Pose.ConvertComponentPosesToLocalPoses(PoseContext.Pose, Output.Pose); + HandMeshComponent->MarkRenderStateDirty(); } }