tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

xrFrame_getPose.https.html (3120B)


      1 <!DOCTYPE html>
      2 <script src="/resources/testharness.js"></script>
      3 <script src="/resources/testharnessreport.js"></script>
      4 <script src="resources/webxr_test_constants.js"></script>
      5 <script src="resources/webxr_util.js"></script>
      6 <script src="resources/webxr_test_asserts.js"></script>
      7 
      8 <script>
      9 
     10 let immersiveTestName = "XRFrame.getPose works for immersive sessions";
     11 let nonImmersiveTestName = "XRFrame.getPose works for non-immersive sessions";
     12 
     13 let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
     14 
     15 let testFunction = function(session, fakeDeviceController, t) {
     16  return Promise.all([
     17    session.requestReferenceSpace('local'),
     18    session.requestReferenceSpace('local')
     19  ]).then((spaces) => new Promise((resolve) => {
     20    function onFrame(time, xrFrame) {
     21      const radians = Math.PI / 2.0; // 90 degrees
     22 
     23      // Both eye-level spaces start out with originOffset = identity matrix.
     24      let space1 = spaces[0];
     25      let space2 = spaces[1];
     26 
     27      let offset = new XRRigidTransform(
     28        DOMPointReadOnly.fromPoint({
     29          x: 2,
     30          y: 3,
     31          z: 4,
     32          w: 1,
     33        }));
     34 
     35      let translatedSpace1 = space1.getOffsetReferenceSpace(offset);
     36      let translated_from_base = xrFrame.getPose(translatedSpace1, space1);
     37 
     38      // Getting the transform of an offset space from the space it was based on
     39      // should be the same as the initially applied offset.
     40      t.step(() => {
     41        assert_matrix_approx_equals(translated_from_base.transform.matrix, offset.matrix, FLOAT_EPSILON);
     42      });
     43 
     44      // Rotate 90 degrees about x axis, then move 1 meter along y axis.
     45      space1 = space1.getOffsetReferenceSpace(new XRRigidTransform(
     46        DOMPointReadOnly.fromPoint({
     47          x : 0,
     48          y : 1,
     49          z : 0,
     50          w : 1
     51        }),
     52        DOMPointReadOnly.fromPoint({
     53          x : Math.sin(radians / 2),
     54          y : 0,
     55          z : 0,
     56          w : Math.cos(radians / 2)
     57        })
     58      ));
     59 
     60      // Rotate 90 degrees about z axis, then move 1 meter along x axis.
     61      space2 = space2.getOffsetReferenceSpace(new XRRigidTransform(
     62        DOMPointReadOnly.fromPoint({
     63          x : 1,
     64          y : 0,
     65          z : 0,
     66          w : 1
     67        }),
     68        DOMPointReadOnly.fromPoint({
     69          x : 0,
     70          y : 0,
     71          z : Math.sin(radians / 2),
     72          w : Math.cos(radians / 2)
     73        })
     74      ));
     75 
     76      let space2_from_space1 = xrFrame.getPose(space1, space2);
     77      const EXPECTED_POSE_MATRIX = [
     78         0, -1, 0, 0, // 1st column
     79         0,  0, 1, 0, // 2nd column
     80        -1,  0, 0, 0, // 3rd column
     81         1,  1, 0, 1 // 4th column
     82      ];
     83 
     84      t.step(() => {
     85        assert_matrix_approx_equals(space2_from_space1.transform.matrix, EXPECTED_POSE_MATRIX, FLOAT_EPSILON);
     86      });
     87 
     88      // Finished test.
     89      resolve();
     90    }
     91 
     92    session.requestAnimationFrame(onFrame);
     93  }));
     94 };
     95 
     96 xr_session_promise_test(immersiveTestName, testFunction,
     97  fakeDeviceInitParams, 'immersive-vr');
     98 xr_session_promise_test(nonImmersiveTestName, testFunction,
     99  fakeDeviceInitParams, 'inline', { 'requiredFeatures': ['local'] });
    100 
    101 </script>