Revert "separate floor offset from space drag transform (#218)"

This reverts commit b0f5e23ffd.
This commit is contained in:
galister
2025-06-08 08:52:49 +09:00
parent 9c0fd4ec21
commit 2ea8b12c15
2 changed files with 22 additions and 29 deletions

View File

@@ -22,7 +22,6 @@ pub(super) struct PlayspaceMover {
universe: ETrackingUniverseOrigin, universe: ETrackingUniverseOrigin,
drag: Option<MoverData<Vec3A>>, drag: Option<MoverData<Vec3A>>,
rotate: Option<MoverData<Quat>>, rotate: Option<MoverData<Quat>>,
floor_offset: f32,
} }
impl PlayspaceMover { impl PlayspaceMover {
@@ -31,7 +30,6 @@ impl PlayspaceMover {
universe: ETrackingUniverseOrigin::TrackingUniverseRawAndUncalibrated, universe: ETrackingUniverseOrigin::TrackingUniverseRawAndUncalibrated,
drag: None, drag: None,
rotate: None, rotate: None,
floor_offset: 0.0,
} }
} }
@@ -84,7 +82,7 @@ impl PlayspaceMover {
if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding { if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding {
apply_chaperone_transform(space_transform.inverse(), chaperone_mgr); 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); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);
} else { } else {
for (i, pointer) in state.input_state.pointers.iter().enumerate() { for (i, pointer) in state.input_state.pointers.iter().enumerate() {
@@ -140,7 +138,7 @@ impl PlayspaceMover {
if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding { if self.universe == ETrackingUniverseOrigin::TrackingUniverseStanding {
apply_chaperone_offset(overlay_offset, chaperone_mgr); 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); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);
} else { } else {
for (i, pointer) in state.input_state.pointers.iter().enumerate() { for (i, pointer) in state.input_state.pointers.iter().enumerate() {
@@ -178,7 +176,7 @@ impl PlayspaceMover {
Affine3A::IDENTITY 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); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);
if self.drag.is_some() { if self.drag.is_some() {
@@ -194,14 +192,14 @@ impl PlayspaceMover {
pub fn fix_floor(&mut self, chaperone_mgr: &mut ChaperoneSetupManager, input: &InputState) { pub fn fix_floor(&mut self, chaperone_mgr: &mut ChaperoneSetupManager, input: &InputState) {
let y1 = input.pointers[0].pose.translation.y; let y1 = input.pointers[0].pose.translation.y;
let y2 = input.pointers[1].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"); log::warn!("Can't fix floor - failed to get zero pose");
return; return;
}; };
let offset = y1.min(y2) - 0.03; 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); chaperone_mgr.commit_working_copy(EChaperoneConfigFile::EChaperoneConfigFile_Live);
if self.drag.is_some() { if self.drag.is_some() {
@@ -270,16 +268,13 @@ fn set_working_copy(
universe: &ETrackingUniverseOrigin, universe: &ETrackingUniverseOrigin,
chaperone_mgr: &mut ChaperoneSetupManager, chaperone_mgr: &mut ChaperoneSetupManager,
mat: &Affine3A, mat: &Affine3A,
floor_offset: f32,
) { ) {
let mut mat = *mat; let mat = HmdMatrix34_t::from_affine(mat);
mat.translation.y += floor_offset;
let ovr_mat = HmdMatrix34_t::from_affine(&mat);
match universe { match universe {
ETrackingUniverseOrigin::TrackingUniverseStanding => { 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),
} }
} }

View File

@@ -16,7 +16,6 @@ struct MoverData<T> {
pub(super) struct PlayspaceMover { pub(super) struct PlayspaceMover {
last_transform: Affine3A, last_transform: Affine3A,
floor_offset: f32,
drag: Option<MoverData<Vec3A>>, drag: Option<MoverData<Vec3A>>,
rotate: Option<MoverData<Quat>>, rotate: Option<MoverData<Quat>>,
} }
@@ -37,7 +36,6 @@ impl PlayspaceMover {
Ok(Self { Ok(Self {
last_transform, last_transform,
floor_offset: 0.0,
drag: None, drag: None,
rotate: None, rotate: None,
@@ -91,7 +89,7 @@ impl PlayspaceMover {
data.pose *= space_transform; data.pose *= space_transform;
data.hand_pose = new_hand; data.hand_pose = new_hand;
self.apply_offset(data.pose, monado); apply_offset(data.pose, monado);
self.rotate = Some(data); self.rotate = Some(data);
} else { } else {
for (i, pointer) in state.input_state.pointers.iter().enumerate() { for (i, pointer) in state.input_state.pointers.iter().enumerate() {
@@ -140,7 +138,7 @@ impl PlayspaceMover {
data.pose.translation += relative_pos; data.pose.translation += relative_pos;
data.hand_pose = new_hand; data.hand_pose = new_hand;
self.apply_offset(data.pose, monado); apply_offset(data.pose, monado);
self.drag = Some(data); self.drag = Some(data);
} else { } else {
for (i, pointer) in state.input_state.pointers.iter().enumerate() { for (i, pointer) in state.input_state.pointers.iter().enumerate() {
@@ -171,7 +169,7 @@ impl PlayspaceMover {
} }
self.last_transform = Affine3A::IDENTITY; 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) { 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 y1 = input.pointers[0].raw_pose.translation.y;
let y2 = input.pointers[1].raw_pose.translation.y; let y2 = input.pointers[1].raw_pose.translation.y;
let delta = y1.min(y2) - 0.03; let delta = y1.min(y2) - 0.03;
self.floor_offset = delta; self.last_transform.translation.y += delta;
self.apply_offset(self.last_transform, monado); 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);
} }
} }
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);
}