108 lines
3.6 KiB
HTML
108 lines
3.6 KiB
HTML
<!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_math_utils.js"></script>
|
|
<script src="resources/webxr_test_constants.js"></script>
|
|
<script src="resources/webxr_test_asserts.js"></script>
|
|
<script>
|
|
|
|
let testName = "XRRigidTransform inverse works";
|
|
let fakeDeviceInitParams = TRACKED_IMMERSIVE_DEVICE;
|
|
|
|
let testFunction =
|
|
(session, fakeDeviceController, t) => new Promise((resolve, reject) => {
|
|
|
|
// An identity transform should be equal to it's inverse.
|
|
let identity_transform = new XRRigidTransform();
|
|
t.step(() => {
|
|
assert_transform_approx_equals(identity_transform, identity_transform.inverse);
|
|
});
|
|
|
|
// Inversed transforms should yield the expected results
|
|
let transform = new XRRigidTransform(
|
|
{ x: 1.0, y: 2.0, z: 3.0 },
|
|
{ x: 0.0, y: 0.0, z: 0.0, w: 1.0 });
|
|
let inverse_transform = transform.inverse;
|
|
let expected_inverse = new XRRigidTransform(
|
|
{ x: -1.0, y: -2.0, z: -3.0 },
|
|
{ x: 0.0, y: 0.0, z: 0.0, w: 1.0 });
|
|
t.step(() => {
|
|
assert_transform_approx_equals(inverse_transform, expected_inverse);
|
|
});
|
|
|
|
transform = new XRRigidTransform(
|
|
{ x: 0.0, y: 0.0, z: 0.0 },
|
|
{ x: 1.0, y: 0.0, z: 0.0, w: 1.0 });
|
|
inverse_transform = transform.inverse;
|
|
expected_inverse = new XRRigidTransform(
|
|
{ x: 0.0, y: 0.0, z: 0.0 },
|
|
{ x: -1.0, y: 0.0, z: 0.0, w: 1.0 });
|
|
t.step(() => {
|
|
assert_transform_approx_equals(inverse_transform, expected_inverse);
|
|
});
|
|
|
|
transform = new XRRigidTransform(
|
|
{ x: 1.0, y: 2.0, z: 3.0 },
|
|
{ x: 0.0, y: 1.0, z: 0.0, w: 1.0 });
|
|
inverse_transform = transform.inverse;
|
|
expected_inverse = new XRRigidTransform(
|
|
{ x: 3.0, y: -2.0, z: -1.0 },
|
|
{ x: 0.0, y: -1.0, z: 0.0, w: 1.0 });
|
|
t.step(() => {
|
|
assert_transform_approx_equals(inverse_transform, expected_inverse);
|
|
});
|
|
|
|
// Transforms should be equal to the inverse of their inverse.
|
|
transform = new XRRigidTransform(
|
|
{ x: 1.0, y: 2.0, z: 3.0 },
|
|
{ x: 1.0, y: 2.0, z: 3.0, w: 4.0 });
|
|
inverse_transform = transform.inverse;
|
|
t.step(() => {
|
|
assert_transform_approx_equals(transform, inverse_transform.inverse);
|
|
});
|
|
|
|
transform = new XRRigidTransform(
|
|
{ x: -9.0, y: 8.0, z: -7.0 },
|
|
{ x: 6.0, y: -5.0, z: 4.0, w: 3.0 });
|
|
inverse_transform = transform.inverse;
|
|
t.step(() => {
|
|
assert_transform_approx_equals(transform, inverse_transform.inverse);
|
|
});
|
|
|
|
transform = new XRRigidTransform(
|
|
{ x: -2.0, y: 1.0, z: -4.0 },
|
|
{ x: 0.0, y: 1.0, z: 0.0, w: 1.0 });
|
|
inverse_transform = transform.inverse;
|
|
t.step(() => {
|
|
assert_transform_approx_equals(transform, inverse_transform.inverse);
|
|
});
|
|
|
|
transform = new XRRigidTransform(
|
|
{ x: 2.0, y: -1.0, z: 4.0 },
|
|
{ x: 1.0, y: 0.0, z: 0.0, w: 1.0 });
|
|
inverse_transform = transform.inverse;
|
|
t.step(() => {
|
|
assert_transform_approx_equals(transform, inverse_transform.inverse);
|
|
});
|
|
|
|
// Inverse should always return the same object, and calling inverse on that
|
|
// object should return the original object.
|
|
transform = new XRRigidTransform(
|
|
{ x: 1.0, y: -2.0, z: 3.0 },
|
|
{ x: 0.0, y: 0.0, z: 1.0, w: 1.0 });
|
|
inverse_transform = transform.inverse;
|
|
t.step(() => {
|
|
assert_equals(transform.inverse, inverse_transform);
|
|
assert_equals(inverse_transform.inverse, transform);
|
|
assert_equals(transform.inverse.inverse, transform);
|
|
assert_equals(transform.inverse.inverse.inverse, inverse_transform);
|
|
});
|
|
|
|
resolve();
|
|
});
|
|
|
|
xr_session_promise_test(testName, testFunction, fakeDeviceInitParams,
|
|
'immersive-vr');
|
|
|
|
</script>
|