| <!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> |