xrReferenceSpace_relationships.https.html (2432B)
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_test_constants.js"></script> 6 <script src="resources/webxr_test_asserts.js"></script> 7 <script> 8 let testName = 9 "Bounded space, viewer space, local and local-floor space have correct poses w.r.t. each other"; 10 // 1m above world origin. 11 const VIEWER_ORIGIN_TRANSFORM = { 12 position: [0, 1, 0], 13 orientation: [0, 0, 0, 1], 14 }; 15 // 0.25m above world origin. 16 const FLOOR_ORIGIN_TRANSFORM = { 17 position: [0, 0.25, 0], 18 orientation: [0, 0, 0, 1], 19 }; 20 const fakeDeviceInitParams = { 21 supportsImmersive: true, 22 supportedModes: ["inline", "immersive-vr"], 23 views: VALID_VIEWS, 24 viewerOrigin: VIEWER_ORIGIN_TRANSFORM, 25 floorOrigin: FLOOR_ORIGIN_TRANSFORM, 26 supportedFeatures: ALL_FEATURES 27 }; 28 let testFunction = function(session, fakeDeviceController, t) { 29 return new Promise((resolve, reject) => { 30 Promise.all([ 31 session.requestReferenceSpace('bounded-floor'), 32 session.requestReferenceSpace('local'), 33 session.requestReferenceSpace('local-floor'), 34 session.requestReferenceSpace('viewer') 35 ]).then(([boundedSpace, localSpace, localFloorSpace, viewerSpace]) => { 36 t.step(() => { 37 }); 38 const onFrame = function(time, xrFrame) { 39 const localFloorPoseInLocalSpace = xrFrame.getPose(localFloorSpace, localSpace); 40 const viewerPoseInLocalFloorSpace = xrFrame.getPose(viewerSpace, localFloorSpace); 41 const boundedFloorPoseInLocalFloorSpace = xrFrame.getPose(boundedSpace, localFloorSpace); 42 t.step(() => { 43 // Local floor space is supposed to be 0.25m above local space (aka world space). 44 assert_equals(localFloorPoseInLocalSpace.transform.position.y, 0.25); 45 // Bounded floor space should be at the same height as local floor space. 46 assert_equals(boundedFloorPoseInLocalFloorSpace.transform.position.y, 0.0); 47 // Viewer space should be additional 0.75m above local-floor space. 48 assert_equals(viewerPoseInLocalFloorSpace.transform.position.y, 0.75); 49 }); 50 resolve(); 51 } 52 session.requestAnimationFrame(onFrame); 53 }); 54 }); 55 }; 56 xr_session_promise_test(testName, testFunction, fakeDeviceInitParams, 'immersive-vr', { 'requiredFeatures': ['local-floor', 'bounded-floor'] }); 57 </script>