From e4a85074a381502d189ebf1901594f053ad9be6c Mon Sep 17 00:00:00 2001 From: Snemby Date: Mon, 11 May 2026 18:19:13 +0200 Subject: [PATCH] fix space rotate the change in rotation is computed in the untransformed stage space. To produce the correct rotation change the quaternion needs to be rotated using the space offset --- wayvr/src/backend/openxr/playspace.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/wayvr/src/backend/openxr/playspace.rs b/wayvr/src/backend/openxr/playspace.rs index 3f02d377..2ac44249 100644 --- a/wayvr/src/backend/openxr/playspace.rs +++ b/wayvr/src/backend/openxr/playspace.rs @@ -88,10 +88,11 @@ impl PlayspaceMover { return; } + let pose_quat = Quat::from_affine3(&data.pose); let new_hand = - Quat::from_affine3(&(data.pose * app.input_state.pointers[data.hand].raw_pose)); + pose_quat * Quat::from_affine3(&app.input_state.pointers[data.hand].raw_pose); - let dq = new_hand * data.hand_pose.conjugate(); + let dq = pose_quat.conjugate() * (new_hand * data.hand_pose.conjugate()) * pose_quat; let mut space_transform = if app.session.config.space_rotate_unlocked { Affine3A::from_quat(dq) } else {