xrFrame_getViewerPose_getPose.https.html (2435B)
1 <!DOCTYPE html> 2 <body> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src="resources/webxr_util.js"></script> 6 <script src="resources/webxr_test_constants.js"></script> 7 <script src="resources/webxr_test_asserts.js"></script> 8 9 <script> 10 11 let testName = "XRFrame getViewerPose(refSpace) matches getPose(viewer, refSpace)."; 12 13 // Used for viewer origin, the actual values should not matter for the test. 14 const poseTransform = { 15 position: [1, 2, 3], 16 orientation: [0.5, 0.5, 0.5, 0.5] // 120 degrees around [1, 1, 1] axis 17 }; 18 19 // Use the same device as tracked immersive device, but modify the viewer origin. 20 const deviceInitParams = Object.assign({}, TRACKED_IMMERSIVE_DEVICE, {viewerOrigin: poseTransform}); 21 22 // Used when creating a reference space that is offset from local space. 23 // Actual values should not matter for the test. 24 const offsetSpaceTransform = new XRRigidTransform( 25 { x: 1.00, y: -1.50, z: 10.00, w: 1.0 }, 26 { x: 0.27, y: 0.00, z: 0.27, w: 0.92}, // 45 degrees around [1, 0, 1] axis 27 ); 28 29 const testFunction = function(session, fakeDeviceController, t) { 30 return Promise.all([ 31 session.requestReferenceSpace('local'), 32 session.requestReferenceSpace('viewer'), 33 ]).then(([referenceSpace, viewerRefSpace]) => new Promise((resolve, reject) => { 34 const offsetRefSpace = referenceSpace.getOffsetReferenceSpace(offsetSpaceTransform); 35 36 function onFrame(time, frame){ 37 t.step(() => { 38 const pose1 = frame.getViewerPose(referenceSpace); 39 const pose2 = frame.getPose(viewerRefSpace, referenceSpace); 40 assert_not_equals(pose1, null); 41 assert_not_equals(pose2, null); 42 assert_matrix_approx_equals(pose1.transform.matrix, pose2.transform.matrix); 43 44 const pose3 = frame.getViewerPose(offsetRefSpace); 45 const pose4 = frame.getPose(viewerRefSpace, offsetRefSpace); 46 assert_not_equals(pose3, null); 47 assert_not_equals(pose4, null); 48 assert_matrix_approx_equals(pose3.transform.matrix, pose4.transform.matrix); 49 }); 50 51 resolve(); 52 } 53 54 session.requestAnimationFrame(onFrame); 55 })); 56 }; 57 58 xr_session_promise_test(testName, testFunction, 59 deviceInitParams, 'immersive-vr'); 60 61 </script> 62 </body>