diff options
author | Manish Goregaokar <manishsmail@gmail.com> | 2019-04-04 16:06:23 -0700 |
---|---|---|
committer | Manish Goregaokar <manishsmail@gmail.com> | 2019-04-04 16:06:23 -0700 |
commit | e33896f3ecc21a4a16d830bbf7076dcbd4d3c55f (patch) | |
tree | 80b666afa952ba66e73a29e4e48d4da700f6e12d /components/script/dom/xrspace.rs | |
parent | d2e2b8da4da132390225ffc85adb8a33a1b36c13 (diff) | |
download | servo-e33896f3ecc21a4a16d830bbf7076dcbd4d3c55f.tar.gz servo-e33896f3ecc21a4a16d830bbf7076dcbd4d3c55f.zip |
Add proper get_pose for XRSpaces
Diffstat (limited to 'components/script/dom/xrspace.rs')
-rw-r--r-- | components/script/dom/xrspace.rs | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/components/script/dom/xrspace.rs b/components/script/dom/xrspace.rs index 8bc62ae5d9e..d9b5a1fc983 100644 --- a/components/script/dom/xrspace.rs +++ b/components/script/dom/xrspace.rs @@ -11,7 +11,7 @@ use crate::dom::globalscope::GlobalScope; use crate::dom::xrreferencespace::XRReferenceSpace; use crate::dom::xrsession::XRSession; use dom_struct::dom_struct; -use euclid::RigidTransform3D; +use euclid::{RigidTransform3D, Rotation3D, Vector3D}; use webvr_traits::WebVRFrameData; #[dom_struct] @@ -39,16 +39,6 @@ impl XRSpace { } impl XRSpace { - /// Gets pose of the viewer with respect to this space - #[allow(unused)] - pub fn get_viewer_pose(&self, base_pose: &WebVRFrameData) -> RigidTransform3D<f64> { - if let Some(reference) = self.downcast::<XRReferenceSpace>() { - reference.get_viewer_pose(base_pose) - } else { - unreachable!() - } - } - /// Gets pose represented by this space /// /// The reference origin used is common between all @@ -62,4 +52,17 @@ impl XRSpace { unreachable!() } } + + pub fn viewer_pose_from_frame_data(data: &WebVRFrameData) -> RigidTransform3D<f64> { + let pos = data.pose.position.unwrap_or([0., 0., 0.]); + let translation = Vector3D::new(pos[0] as f64, pos[1] as f64, pos[2] as f64); + let orient = data.pose.orientation.unwrap_or([0., 0., 0., 0.]); + let rotation = Rotation3D::quaternion( + orient[0] as f64, + orient[1] as f64, + orient[2] as f64, + orient[3] as f64, + ); + RigidTransform3D::new(rotation, translation) + } } |