aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrreferencespace.rs
diff options
context:
space:
mode:
authorManish Goregaokar <manishsmail@gmail.com>2019-04-05 18:42:57 -0700
committerManish Goregaokar <manishsmail@gmail.com>2019-04-08 17:31:07 -0700
commitea3609b42e7be5fe2f1d0e1b7953116783ce856a (patch)
tree629292ab0919c9abb96760c0684ef68456b364ff /components/script/dom/xrreferencespace.rs
parent91378cc859b60f672a01ec784e17a332c4f84498 (diff)
downloadservo-ea3609b42e7be5fe2f1d0e1b7953116783ce856a.tar.gz
servo-ea3609b42e7be5fe2f1d0e1b7953116783ce856a.zip
Add some math verifying relationship between get_viewer_pose and get_pose
Diffstat (limited to 'components/script/dom/xrreferencespace.rs')
-rw-r--r--components/script/dom/xrreferencespace.rs10
1 files changed, 8 insertions, 2 deletions
diff --git a/components/script/dom/xrreferencespace.rs b/components/script/dom/xrreferencespace.rs
index 804768eee69..664dc4f0e23 100644
--- a/components/script/dom/xrreferencespace.rs
+++ b/components/script/dom/xrreferencespace.rs
@@ -56,12 +56,18 @@ impl XRReferenceSpaceMethods for XRReferenceSpace {
impl XRReferenceSpace {
/// Gets pose of the viewer with respect to this space
///
- /// This is equivalent to `get_pose(self).inverse() * get_pose(viewerSpace)`, however
- /// we specialize it to be efficient
+ /// This is equivalent to `get_pose(self).inverse() * get_pose(viewerSpace)` (in column vector notation),
+ /// however we specialize it to be efficient
pub fn get_viewer_pose(&self, base_pose: &WebVRFrameData) -> RigidTransform3D<f64> {
let pose = self.get_unoffset_viewer_pose(base_pose);
// This may change, see https://github.com/immersive-web/webxr/issues/567
+
+ // in column-vector notation,
+ // get_viewer_pose(space) = get_pose(space).inverse() * get_pose(viewer_space)
+ // = (get_unoffset_pose(space) * offset).inverse() * get_pose(viewer_space)
+ // = offset.inverse() * get_unoffset_pose(space).inverse() * get_pose(viewer_space)
+ // = offset.inverse() * get_unoffset_viewer_pose(space)
let offset = self.transform.get().transform();
let inverse = offset.inverse();
inverse.pre_mul(&pose)