aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrspace.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-04-04 16:06:23 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-04-04 16:06:23 -0700
commite33896f3ecc21a4a16d830bbf7076dcbd4d3c55f (patch)
tree80b666afa952ba66e73a29e4e48d4da700f6e12d /components/script/dom/xrspace.rs
parentd2e2b8da4da132390225ffc85adb8a33a1b36c13 (diff)
downloadservo-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.rs25
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)
+ }
}