| |
| <!DOCTYPE html> |
| <script src=/resources/testharness.js></script> |
| <script src=/resources/testharnessreport.js></script> |
| <script src="resources/webxr_util.js"></script> |
| <script src="resources/webxr_test_constants.js"></script> |
| <script src="resources/webxr_test_asserts.js"></script> |
| <script> |
| let testName = |
| "Bounded space, viewer space, local and local-floor space have correct poses w.r.t. each other"; |
| // 1m above world origin. |
| const VIEWER_ORIGIN_TRANSFORM = { |
| position: [0, 1, 0], |
| orientation: [0, 0, 0, 1], |
| }; |
| // 0.25m above world origin. |
| const FLOOR_ORIGIN_TRANSFORM = { |
| position: [0, 0.25, 0], |
| orientation: [0, 0, 0, 1], |
| }; |
| const fakeDeviceInitParams = { |
| supportsImmersive: true, |
| supportedModes: ["inline", "immersive-vr"], |
| views: VALID_VIEWS, |
| viewerOrigin: VIEWER_ORIGIN_TRANSFORM, |
| floorOrigin: FLOOR_ORIGIN_TRANSFORM, |
| supportedFeatures: ALL_FEATURES |
| }; |
| let testFunction = function(session, fakeDeviceController, t) { |
| return new Promise((resolve, reject) => { |
| Promise.all([ |
| session.requestReferenceSpace('bounded-floor'), |
| session.requestReferenceSpace('local'), |
| session.requestReferenceSpace('local-floor'), |
| session.requestReferenceSpace('viewer') |
| ]).then(([boundedSpace, localSpace, localFloorSpace, viewerSpace]) => { |
| t.step(() => { |
| }); |
| const onFrame = function(time, xrFrame) { |
| const localFloorPoseInLocalSpace = xrFrame.getPose(localFloorSpace, localSpace); |
| const viewerPoseInLocalFloorSpace = xrFrame.getPose(viewerSpace, localFloorSpace); |
| const boundedFloorPoseInLocalFloorSpace = xrFrame.getPose(boundedSpace, localFloorSpace); |
| t.step(() => { |
| // Local floor space is supposed to be 0.25m above local space (aka world space). |
| assert_equals(localFloorPoseInLocalSpace.transform.position.y, 0.25); |
| // Bounded floor space should be at the same height as local floor space. |
| assert_equals(boundedFloorPoseInLocalFloorSpace.transform.position.y, 0.0); |
| // Viewer space should be additional 0.75m above local-floor space. |
| assert_equals(viewerPoseInLocalFloorSpace.transform.position.y, 0.75); |
| }); |
| resolve(); |
| } |
| session.requestAnimationFrame(onFrame); |
| }); |
| }); |
| }; |
| xr_session_promise_test(testName, testFunction, fakeDeviceInitParams, 'immersive-vr', { 'requiredFeatures': ['local-floor', 'bounded-floor'] }); |
| </script> |