From e5b802ecced29f803fa0e51cb9ea84bbe184e5c1 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Fri, 5 Apr 2019 17:49:53 -0700 Subject: [PATCH] Support position-disabled spaces --- .../script/dom/xrstationaryreferencespace.rs | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/components/script/dom/xrstationaryreferencespace.rs b/components/script/dom/xrstationaryreferencespace.rs index 6c5d53f9457..daf033eecaa 100644 --- a/components/script/dom/xrstationaryreferencespace.rs +++ b/components/script/dom/xrstationaryreferencespace.rs @@ -54,19 +54,46 @@ impl XRStationaryReferenceSpace { /// Gets pose of the viewer with respect to this space /// /// Does not apply originOffset, use get_viewer_pose on XRReferenceSpace instead - pub fn get_unoffset_viewer_pose(&self, base_pose: &WebVRFrameData) -> RigidTransform3D { - // XXXManishearth add floor-level transform for floor-level and disable position in position-disabled - XRSpace::viewer_pose_from_frame_data(base_pose) + pub fn get_unoffset_viewer_pose(&self, viewer_pose: &WebVRFrameData) -> RigidTransform3D { + let viewer_pose = XRSpace::viewer_pose_from_frame_data(viewer_pose); + match self.ty { + XRStationaryReferenceSpaceSubtype::Eye_level => { + // we get viewer poses in eye-level space by default + viewer_pose + } + XRStationaryReferenceSpaceSubtype::Floor_level => { + // XXXManishearth support floor-level + viewer_pose + } + XRStationaryReferenceSpaceSubtype::Position_disabled => { + // This space follows the user around, but does not mirror the user's orientation + // Thus, the viewer's pose relative to this space is simply their orientation + viewer_pose.rotation.into() + } + } + } /// Gets pose represented by this space /// /// Does not apply originOffset, use get_pose on XRReferenceSpace instead - pub fn get_unoffset_pose(&self, _: &WebVRFrameData) -> RigidTransform3D { + pub fn get_unoffset_pose(&self, viewer_pose: &WebVRFrameData) -> RigidTransform3D { // XXXManishearth add floor-level transform for floor-level and disable position in position-disabled - - // The eye-level pose is basically whatever the headset pose was at t=0, which - // for most devices is (0, 0, 0) - RigidTransform3D::identity() + match self.ty { + XRStationaryReferenceSpaceSubtype::Eye_level => { + // The eye-level pose is basically whatever the headset pose was at t=0, which + // for most devices is (0, 0, 0) + RigidTransform3D::identity() + } + XRStationaryReferenceSpaceSubtype::Floor_level => { + // XXXManishearth support floor-level + RigidTransform3D::identity() + } + XRStationaryReferenceSpaceSubtype::Position_disabled => { + // 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); + viewer_pose.translation.into() + } + } } }