summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webxr/hit-test/xrRay_matrix.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webxr/hit-test/xrRay_matrix.https.html')
-rw-r--r--testing/web-platform/tests/webxr/hit-test/xrRay_matrix.https.html101
1 files changed, 101 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webxr/hit-test/xrRay_matrix.https.html b/testing/web-platform/tests/webxr/hit-test/xrRay_matrix.https.html
new file mode 100644
index 0000000000..77f134a75f
--- /dev/null
+++ b/testing/web-platform/tests/webxr/hit-test/xrRay_matrix.https.html
@@ -0,0 +1,101 @@
+<!DOCTYPE html>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="../resources/webxr_test_constants.js"></script>
+<script src="../resources/webxr_test_asserts.js"></script>
+<script src="../resources/webxr_math_utils.js"></script>
+<script>
+
+let matrix_tests_name = "XRRay matrix works";
+
+let matrix_tests = function() {
+ // Matrix tests for XRRay.
+ // Spec: https://immersive-web.github.io/webxr/#xrray-interface
+
+ const initialOrigin = {x : 0, y : 0, z : 0, w : 1};
+ const initialDirection = {x : 0, y : 0, z : -1, w : 0};
+
+ // Test 1. Simple translation and rotation.
+ {
+ let originDict = {x : 10.0, y : 10.0, z : 10.0, w : 1.0};
+ let directionDict = {x : 10.0, y : 0.0, z : 0.0, w : 0.0};
+ let directionNorm = {x : 1.0, y : 0.0, z : 0.0, w : 0.0};
+ let xrRay = new XRRay(
+ DOMPoint.fromPoint(originDict),
+ DOMPoint.fromPoint(directionDict));
+
+ let transformedOrigin = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialOrigin));
+ let transformedDirection = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialDirection));
+
+ assert_point_approx_equals(
+ originDict, transformedOrigin,
+ FLOAT_EPSILON, "origin-test1:");
+ assert_point_approx_equals(
+ directionNorm, transformedDirection,
+ FLOAT_EPSILON, "direction-test1:");
+ }
+
+ // Test 2. Co-linear direction - rotation by 180 deg.
+ {
+ let originDict = {x : 10.0, y : 10.0, z : 10.0, w : 1.0};
+ let directionDict = {x : 0.0, y : 0.0, z : 1.0, w : 0.0};
+ let directionNorm = {x : 0.0, y : 0.0, z : 1.0, w : 0.0};
+ let xrRay = new XRRay(
+ DOMPoint.fromPoint(originDict),
+ DOMPoint.fromPoint(directionDict));
+
+ let transformedOrigin = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialOrigin));
+ let transformedDirection = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialDirection));
+
+ assert_point_approx_equals(
+ originDict, transformedOrigin,
+ FLOAT_EPSILON, "origin-test2:");
+ assert_point_approx_equals(
+ directionNorm, transformedDirection,
+ FLOAT_EPSILON, "direction-test2:");
+ }
+
+ // Test 3. No translation.
+ {
+ let originDict = {x : 0.0, y : 0.0, z : 0.0, w : 1.0};
+ let directionDict = {x : 10.0, y : 0.0, z : 0.0, w : 0.0};
+ let directionNorm = {x : 1.0, y : 0.0, z : 0.0, w : 0.0};
+ let xrRay = new XRRay(
+ DOMPoint.fromPoint(originDict),
+ DOMPoint.fromPoint(directionDict));
+
+ let transformedOrigin = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialOrigin));
+ let transformedDirection = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialDirection));
+
+ assert_point_approx_equals(
+ originDict, transformedOrigin,
+ FLOAT_EPSILON, "origin-test3:");
+ assert_point_approx_equals(
+ directionNorm, transformedDirection,
+ FLOAT_EPSILON, "direction-test3:");
+ }
+
+ // Test 4. No rotation.
+ {
+ let originDict = {x : 10.0, y : 10.0, z : 10.0, w : 1.0};
+ let directionDict = {x : 0.0, y : 0.0, z : -1.0, w : 0.0};
+ let directionNorm = {x : 0.0, y : 0.0, z : -1.0, w : 0.0};
+ let xrRay = new XRRay(
+ DOMPoint.fromPoint(originDict),
+ DOMPoint.fromPoint(directionDict));
+
+ let transformedOrigin = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialOrigin));
+ let transformedDirection = normalize_perspective(transform_point_by_matrix(xrRay.matrix, initialDirection));
+
+ assert_point_approx_equals(
+ originDict, transformedOrigin,
+ FLOAT_EPSILON, "origin-test4:");
+ assert_point_approx_equals(
+ directionNorm, transformedDirection,
+ FLOAT_EPSILON, "direction-test4:");
+ }
+};
+
+test(matrix_tests, matrix_tests_name);
+
+</script>