Add rough support for floor-level space

This commit is contained in:
Manish Goregaokar 2019-04-05 18:18:15 -07:00
parent e5b802ecce
commit 91378cc859

View file

@ -12,7 +12,7 @@ use crate::dom::xrrigidtransform::XRRigidTransform;
use crate::dom::xrsession::XRSession; use crate::dom::xrsession::XRSession;
use crate::dom::xrspace::XRSpace; use crate::dom::xrspace::XRSpace;
use dom_struct::dom_struct; use dom_struct::dom_struct;
use euclid::RigidTransform3D; use euclid::{RigidTransform3D, Vector3D};
use webvr_traits::WebVRFrameData; use webvr_traits::WebVRFrameData;
#[dom_struct] #[dom_struct]
@ -62,8 +62,11 @@ impl XRStationaryReferenceSpace {
viewer_pose viewer_pose
} }
XRStationaryReferenceSpaceSubtype::Floor_level => { XRStationaryReferenceSpaceSubtype::Floor_level => {
// XXXManishearth support floor-level // XXXManishearth support getting floor info from stage parameters
viewer_pose
// assume approximate user height of 2 meters
let floor_to_eye: RigidTransform3D<f64> = Vector3D::new(0., 2., 0.).into();
floor_to_eye.pre_mul(&viewer_pose)
} }
XRStationaryReferenceSpaceSubtype::Position_disabled => { XRStationaryReferenceSpaceSubtype::Position_disabled => {
// This space follows the user around, but does not mirror the user's orientation // This space follows the user around, but does not mirror the user's orientation
@ -84,16 +87,19 @@ impl XRStationaryReferenceSpace {
// The eye-level pose is basically whatever the headset pose was at t=0, which // The eye-level pose is basically whatever the headset pose was at t=0, which
// for most devices is (0, 0, 0) // for most devices is (0, 0, 0)
RigidTransform3D::identity() RigidTransform3D::identity()
} },
XRStationaryReferenceSpaceSubtype::Floor_level => { XRStationaryReferenceSpaceSubtype::Floor_level => {
// XXXManishearth support floor-level // XXXManishearth support getting floor info from stage parameters
RigidTransform3D::identity()
} // Assume approximate height of 2m
// the floor-level space is 2m below the eye-level space, which is (0, 0, 0)
Vector3D::new(0., -2., 0.).into()
},
XRStationaryReferenceSpaceSubtype::Position_disabled => { XRStationaryReferenceSpaceSubtype::Position_disabled => {
// This space follows the user around, but does not mirror the user's orientation // This space follows the user around, but does not mirror the user's orientation
let viewer_pose = XRSpace::viewer_pose_from_frame_data(viewer_pose); let viewer_pose = XRSpace::viewer_pose_from_frame_data(viewer_pose);
viewer_pose.translation.into() viewer_pose.translation.into()
} },
} }
} }
} }