From 2ea8b12c153f9dcde4b0896cb216584805a5575e Mon Sep 17 00:00:00 2001 From: galister <22305755+galister@users.noreply.github.com> Date: Sun, 8 Jun 2025 08:52:49 +0900 Subject: [PATCH] Revert "separate floor offset from space drag transform (#218)" This reverts commit b0f5e23ffd84f96fbe9ec19b4b46b3a131c01eca. --- src/backend/openvr/playspace.rs | 23 +++++++++-------------- src/backend/openxr/playspace.rs | 28 +++++++++++++--------------- 2 files changed, 22 insertions(+), 29 deletions(-) diff --git a/src/backend/openvr/playspace.rs b/src/backend/openvr/playspace.rs index 36efcc2..50e16b2 100644 --- a/src/backend/openvr/playspace.rs +++ b/src/backend/openvr/playspace.rs @@ -22,7 +22,6 @@ pub(super) struct PlayspaceMover { universe: ETrackingUniverseOrigin, drag: Option>, rotate: Option>, - floor_offset: f32, } impl PlayspaceMover { @@ -31,7 +30,6 @@ impl PlayspaceMover { universe: ETrackingUniverseOrigin::TrackingUniverseRawAndUncalibrated, drag: None, rotate: None, - floor_offset: 0.0, } } @@ -84,7 +82,7 @@ impl PlayspaceMover { if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding { apply_chaperone_transform(space_transform.inverse(), chaperone_mgr); } - set_working_copy(&universe, chaperone_mgr, &data.pose, self.floor_offset); + set_working_copy(&universe, chaperone_mgr, &data.pose); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live); } else { for (i, pointer) in state.input_state.pointers.iter().enumerate() { @@ -140,7 +138,7 @@ impl PlayspaceMover { if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding { apply_chaperone_offset(overlay_offset, chaperone_mgr); } - set_working_copy(&universe, chaperone_mgr, &data.pose, self.floor_offset); + set_working_copy(&universe, chaperone_mgr, &data.pose); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live); } else { for (i, pointer) in state.input_state.pointers.iter().enumerate() { @@ -178,7 +176,7 @@ impl PlayspaceMover { Affine3A::IDENTITY }; - set_working_copy(&self.universe, chaperone_mgr, &xform, self.floor_offset); + set_working_copy(&self.universe, chaperone_mgr, &xform); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live); if self.drag.is_some() { @@ -194,14 +192,14 @@ impl PlayspaceMover { pub fn fix_floor(&mut self, chaperone_mgr: &mut ChaperoneSetupManager, input: &InputState) { let y1 = input.pointers[0].pose.translation.y; let y2 = input.pointers[1].pose.translation.y; - let Some(mat) = get_working_copy(&self.universe, chaperone_mgr) else { + let Some(mut mat) = get_working_copy(&self.universe, chaperone_mgr) else { log::warn!("Can't fix floor - failed to get zero pose"); return; }; let offset = y1.min(y2) - 0.03; - self.floor_offset = offset; + mat.translation.y += offset; - set_working_copy(&self.universe, chaperone_mgr, &mat, self.floor_offset); + set_working_copy(&self.universe, chaperone_mgr, &mat); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live); if self.drag.is_some() { @@ -270,16 +268,13 @@ fn set_working_copy( universe: &ETrackingUniverseOrigin, chaperone_mgr: &mut ChaperoneSetupManager, mat: &Affine3A, - floor_offset: f32, ) { - let mut mat = *mat; - mat.translation.y += floor_offset; - let ovr_mat = HmdMatrix34_t::from_affine(&mat); + let mat = HmdMatrix34_t::from_affine(mat); match universe { ETrackingUniverseOrigin::TrackingUniverseStanding => { - chaperone_mgr.set_working_standing_zero_pose_to_raw_tracking_pose(&ovr_mat); + chaperone_mgr.set_working_standing_zero_pose_to_raw_tracking_pose(&mat); } - _ => chaperone_mgr.set_working_seated_zero_pose_to_raw_tracking_pose(&ovr_mat), + _ => chaperone_mgr.set_working_seated_zero_pose_to_raw_tracking_pose(&mat), } } diff --git a/src/backend/openxr/playspace.rs b/src/backend/openxr/playspace.rs index e233083..487c929 100644 --- a/src/backend/openxr/playspace.rs +++ b/src/backend/openxr/playspace.rs @@ -16,7 +16,6 @@ struct MoverData { pub(super) struct PlayspaceMover { last_transform: Affine3A, - floor_offset: f32, drag: Option>, rotate: Option>, } @@ -37,7 +36,6 @@ impl PlayspaceMover { Ok(Self { last_transform, - floor_offset: 0.0, drag: None, rotate: None, @@ -91,7 +89,7 @@ impl PlayspaceMover { data.pose *= space_transform; data.hand_pose = new_hand; - self.apply_offset(data.pose, monado); + apply_offset(data.pose, monado); self.rotate = Some(data); } else { for (i, pointer) in state.input_state.pointers.iter().enumerate() { @@ -140,7 +138,7 @@ impl PlayspaceMover { data.pose.translation += relative_pos; data.hand_pose = new_hand; - self.apply_offset(data.pose, monado); + apply_offset(data.pose, monado); self.drag = Some(data); } else { for (i, pointer) in state.input_state.pointers.iter().enumerate() { @@ -171,7 +169,7 @@ impl PlayspaceMover { } self.last_transform = Affine3A::IDENTITY; - self.apply_offset(self.last_transform, monado); + apply_offset(self.last_transform, monado); } pub fn fix_floor(&mut self, input: &InputState, monado: &mut Monado) { @@ -187,15 +185,15 @@ impl PlayspaceMover { let y1 = input.pointers[0].raw_pose.translation.y; let y2 = input.pointers[1].raw_pose.translation.y; let delta = y1.min(y2) - 0.03; - self.floor_offset = delta; - self.apply_offset(self.last_transform, monado); - } - - fn apply_offset(&self, transform: Affine3A, monado: &mut Monado) { - let pose = Pose { - position: (transform.translation + Vec3A::new(0.0, self.floor_offset, 0.0)).into(), - orientation: Quat::from_affine3(&transform).into(), - }; - let _ = monado.set_reference_space_offset(ReferenceSpaceType::Stage, pose); + self.last_transform.translation.y += delta; + apply_offset(self.last_transform, monado); } } + +fn apply_offset(transform: Affine3A, monado: &mut Monado) { + let pose = Pose { + position: transform.translation.into(), + orientation: Quat::from_affine3(&transform).into(), + }; + let _ = monado.set_reference_space_offset(ReferenceSpaceType::Stage, pose); +}