summaryrefslogtreecommitdiffstats
path: root/modules/openxr/scene/openxr_hand.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-10-04 15:43:18 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-10-04 15:43:18 +0200
commitd7bca20359e551b837777ade9cd4eadaf64d5daf (patch)
tree4160bb82b93eb00378d08b0d80382eda32d58671 /modules/openxr/scene/openxr_hand.cpp
parent1e544505be34c794d83052ea48ed70702cdec831 (diff)
parentc60ef33175b8e92a7eee56e0766d0edd5d6c7a6d (diff)
downloadredot-engine-d7bca20359e551b837777ade9cd4eadaf64d5daf.tar.gz
Merge pull request #82722 from BastiaanOlij/openxr_fix_hand_tracking_issues
OpenXR: Fix small hand tracking issues
Diffstat (limited to 'modules/openxr/scene/openxr_hand.cpp')
-rw-r--r--modules/openxr/scene/openxr_hand.cpp15
1 files changed, 8 insertions, 7 deletions
diff --git a/modules/openxr/scene/openxr_hand.cpp b/modules/openxr/scene/openxr_hand.cpp
index bedc8874d6..c48fac8055 100644
--- a/modules/openxr/scene/openxr_hand.cpp
+++ b/modules/openxr/scene/openxr_hand.cpp
@@ -113,7 +113,7 @@ void OpenXRHand::_set_motion_range() {
break;
}
- hand_tracking_ext->set_motion_range(hand, xr_motion_range);
+ hand_tracking_ext->set_motion_range(OpenXRHandTrackingExtension::HandTrackedHands(hand), xr_motion_range);
}
Skeleton3D *OpenXRHand::get_skeleton() {
@@ -204,7 +204,7 @@ void OpenXRHand::_update_skeleton() {
Quaternion inv_quaternions[XR_HAND_JOINT_COUNT_EXT];
Vector3 positions[XR_HAND_JOINT_COUNT_EXT];
- const OpenXRHandTrackingExtension::HandTracker *hand_tracker = hand_tracking_ext->get_hand_tracker(hand);
+ const OpenXRHandTrackingExtension::HandTracker *hand_tracker = hand_tracking_ext->get_hand_tracker(OpenXRHandTrackingExtension::HandTrackedHands(hand));
const float ws = XRServer::get_singleton()->get_world_scale();
if (hand_tracker->is_initialized && hand_tracker->locations.isActive) {
@@ -243,26 +243,27 @@ void OpenXRHand::_update_skeleton() {
// Get our target quaternion
Quaternion q = quaternions[i];
+ // Get our target position
+ Vector3 p = positions[i];
+
// get local translation, parent should already be processed
if (parent == -1) {
// use our palm location here, that is what we are tracking
q = inv_quaternions[XR_HAND_JOINT_PALM_EXT] * q;
+ p = inv_quaternions[XR_HAND_JOINT_PALM_EXT].xform(p - positions[XR_HAND_JOINT_PALM_EXT]);
} else {
int found = false;
for (int b = 0; b < XR_HAND_JOINT_COUNT_EXT && !found; b++) {
if (bones[b] == parent) {
q = inv_quaternions[b] * q;
+ p = inv_quaternions[b].xform(p - positions[b]);
found = true;
}
}
}
- // And get the movement from our rest position
- // Transform3D rest = skeleton->get_bone_rest(bones[i]);
- // q = rest.basis.get_quaternion().inverse() * q;
-
// and set our pose
- // skeleton->set_bone_pose_position(bones[i], v);
+ skeleton->set_bone_pose_position(bones[i], p);
skeleton->set_bone_pose_rotation(bones[i], q);
}
}