From 83b9a1920fe55786fd03355e37a57c369bda7ff4 Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Mon, 13 Jul 2026 10:41:50 +0900 Subject: [PATCH] openxr: recenter also recenters yaw --- wayvr/src/backend/openxr/playspace.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/wayvr/src/backend/openxr/playspace.rs b/wayvr/src/backend/openxr/playspace.rs index 1e824757..e8dc887d 100644 --- a/wayvr/src/backend/openxr/playspace.rs +++ b/wayvr/src/backend/openxr/playspace.rs @@ -247,6 +247,17 @@ impl PlayspaceMover { pose.position.x += input.hmd.translation.x; pose.position.z += input.hmd.translation.z; + let forward = input.hmd.transform_vector3a(Vec3A::NEG_Z); + let horizontal_len_sq = forward.x.mul_add(forward.x, forward.z * forward.z); + + // if hmd is so vertical that we can't tell where forward is, don't touch rotation + if horizontal_len_sq > 1e-8 { + let yaw = (-forward.x).atan2(-forward.z); + let current_rotation: Quat = pose.orientation.into(); + + pose.orientation = (current_rotation * Quat::from_rotation_y(yaw)).into(); + } + let _ = monado .set_reference_space_offset(ReferenceSpaceType::Stage, pose) .inspect_err(|e| log::warn!("Could not recenter due to libmonado error: {e:?}"));