xrRigidTransform_inverse.https.html (3704B)
1 <!DOCTYPE html> 2 <script src="/resources/testharness.js"></script> 3 <script src="/resources/testharnessreport.js"></script> 4 <script src="resources/webxr_util.js"></script> 5 <script src="resources/webxr_math_utils.js"></script> 6 <script src="resources/webxr_test_constants.js"></script> 7 <script src="resources/webxr_test_asserts.js"></script> 8 <script> 9 10 let testName = "XRRigidTransform inverse works"; 11 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE; 12 13 let testFunction = 14 (session, fakeDeviceController, t) => new Promise((resolve, reject) => { 15 16 // An identity transform should be equal to it's inverse. 17 let identity_transform = new XRRigidTransform(); 18 t.step(() => { 19 assert_transform_approx_equals(identity_transform, identity_transform.inverse); 20 }); 21 22 // Inversed transforms should yield the expected results 23 let transform = new XRRigidTransform( 24 { x: 1.0, y: 2.0, z: 3.0 }, 25 { x: 0.0, y: 0.0, z: 0.0, w: 1.0 }); 26 let inverse_transform = transform.inverse; 27 let expected_inverse = new XRRigidTransform( 28 { x: -1.0, y: -2.0, z: -3.0 }, 29 { x: 0.0, y: 0.0, z: 0.0, w: 1.0 }); 30 t.step(() => { 31 assert_transform_approx_equals(inverse_transform, expected_inverse); 32 }); 33 34 transform = new XRRigidTransform( 35 { x: 0.0, y: 0.0, z: 0.0 }, 36 { x: 1.0, y: 0.0, z: 0.0, w: 1.0 }); 37 inverse_transform = transform.inverse; 38 expected_inverse = new XRRigidTransform( 39 { x: 0.0, y: 0.0, z: 0.0 }, 40 { x: -1.0, y: 0.0, z: 0.0, w: 1.0 }); 41 t.step(() => { 42 assert_transform_approx_equals(inverse_transform, expected_inverse); 43 }); 44 45 transform = new XRRigidTransform( 46 { x: 1.0, y: 2.0, z: 3.0 }, 47 { x: 0.0, y: 1.0, z: 0.0, w: 1.0 }); 48 inverse_transform = transform.inverse; 49 expected_inverse = new XRRigidTransform( 50 { x: 3.0, y: -2.0, z: -1.0 }, 51 { x: 0.0, y: -1.0, z: 0.0, w: 1.0 }); 52 t.step(() => { 53 assert_transform_approx_equals(inverse_transform, expected_inverse); 54 }); 55 56 // Transforms should be equal to the inverse of their inverse. 57 transform = new XRRigidTransform( 58 { x: 1.0, y: 2.0, z: 3.0 }, 59 { x: 1.0, y: 2.0, z: 3.0, w: 4.0 }); 60 inverse_transform = transform.inverse; 61 t.step(() => { 62 assert_transform_approx_equals(transform, inverse_transform.inverse); 63 }); 64 65 transform = new XRRigidTransform( 66 { x: -9.0, y: 8.0, z: -7.0 }, 67 { x: 6.0, y: -5.0, z: 4.0, w: 3.0 }); 68 inverse_transform = transform.inverse; 69 t.step(() => { 70 assert_transform_approx_equals(transform, inverse_transform.inverse); 71 }); 72 73 transform = new XRRigidTransform( 74 { x: -2.0, y: 1.0, z: -4.0 }, 75 { x: 0.0, y: 1.0, z: 0.0, w: 1.0 }); 76 inverse_transform = transform.inverse; 77 t.step(() => { 78 assert_transform_approx_equals(transform, inverse_transform.inverse); 79 }); 80 81 transform = new XRRigidTransform( 82 { x: 2.0, y: -1.0, z: 4.0 }, 83 { x: 1.0, y: 0.0, z: 0.0, w: 1.0 }); 84 inverse_transform = transform.inverse; 85 t.step(() => { 86 assert_transform_approx_equals(transform, inverse_transform.inverse); 87 }); 88 89 // Inverse should always return the same object, and calling inverse on that 90 // object should return the original object. 91 transform = new XRRigidTransform( 92 { x: 1.0, y: -2.0, z: 3.0 }, 93 { x: 0.0, y: 0.0, z: 1.0, w: 1.0 }); 94 inverse_transform = transform.inverse; 95 t.step(() => { 96 assert_equals(transform.inverse, inverse_transform); 97 assert_equals(inverse_transform.inverse, transform); 98 assert_equals(transform.inverse.inverse, transform); 99 assert_equals(transform.inverse.inverse.inverse, inverse_transform); 100 }); 101 102 resolve(); 103 }); 104 105 xr_session_promise_test(testName, testFunction, fakeDeviceInitParams, 106 'immersive-vr'); 107 108 </script>