aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/xrrigidtransform.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/xrrigidtransform.rs')
-rw-r--r--components/script/dom/xrrigidtransform.rs32
1 files changed, 19 insertions, 13 deletions
diff --git a/components/script/dom/xrrigidtransform.rs b/components/script/dom/xrrigidtransform.rs
index 2999ce7a1b1..e019f90d678 100644
--- a/components/script/dom/xrrigidtransform.rs
+++ b/components/script/dom/xrrigidtransform.rs
@@ -20,6 +20,10 @@ pub struct XRRigidTransform {
reflector_: Reflector,
position: Dom<DOMPointReadOnly>,
orientation: Dom<DOMPointReadOnly>,
+ #[ignore_malloc_size_of = "defined in euclid"]
+ translate: Transform3D<f64>,
+ #[ignore_malloc_size_of = "defined in euclid"]
+ rotate: Rotation3D<f64>,
}
impl XRRigidTransform {
@@ -27,10 +31,22 @@ impl XRRigidTransform {
position: &DOMPointReadOnly,
orientation: &DOMPointReadOnly,
) -> XRRigidTransform {
+ let translate = Transform3D::create_translation(
+ position.X() as f64,
+ position.Y() as f64,
+ position.Z() as f64,
+ );
+ let rotate = Rotation3D::unit_quaternion(
+ orientation.X() as f64,
+ orientation.Y() as f64,
+ orientation.Z() as f64,
+ orientation.W() as f64,
+ );
XRRigidTransform {
reflector_: Reflector::new(),
position: Dom::from_ref(position),
orientation: Dom::from_ref(orientation),
+ translate, rotate
}
}
@@ -86,18 +102,8 @@ impl XRRigidTransformMethods for XRRigidTransform {
impl XRRigidTransform {
pub fn matrix(&self) -> Transform3D<f64> {
- // XXXManishearth compute this during initialization
- let translate = Transform3D::create_translation(
- self.position.X(),
- self.position.Y(),
- self.position.Z(),
- );
- let rotation = Rotation3D::unit_quaternion(
- self.orientation.X(),
- self.orientation.Y(),
- self.orientation.Z(),
- self.orientation.W(),
- );
- translate.pre_mul(&rotation.to_transform())
+ // Spec says the orientation applies first,
+ // so post-multiply (?)
+ self.translate.post_mul(&self.rotate.to_transform())
}
}