diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-27 15:33:37 +0100 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2024-01-27 15:33:37 +0100 |
commit | 1f8212b0b34fe308b1515a15c1d99504f8bad5d2 (patch) | |
tree | 48b818b37008ad2494ad0753f991ff591d743951 /editor/tests/raycast-test.cpp | |
parent | 07d7c30d33a3adfc24031d63582ac0b7b71bd96b (diff) |
w
Diffstat (limited to 'editor/tests/raycast-test.cpp')
-rw-r--r-- | editor/tests/raycast-test.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/editor/tests/raycast-test.cpp b/editor/tests/raycast-test.cpp index 549760c3..adabb0bf 100644 --- a/editor/tests/raycast-test.cpp +++ b/editor/tests/raycast-test.cpp @@ -10,7 +10,6 @@ namespace { struct aabb_result { Vector2 ts; - float tmin, tmax; bool result; }; @@ -22,8 +21,21 @@ std::array<uint8_t, 2> ray_aabb_signs(Vector2 ray_dir_inv_norm) return { signs[0], signs[1] }; } +Vector2 dir_to_inv_norm(Vector2 ray_dir) +{ + constexpr float eps = 1e-6f; + auto dir = ray_dir.normalized(); + Vector2 inv_dir{NoInit}; + for (unsigned i = 0; i < 2; i++) + if (Math::abs(dir[i]) < eps) + inv_dir[i] = 0; + else + inv_dir[i] = 1 / dir[i]; + return inv_dir; +} + // https://tavianator.com/2022/ray_box_boundary.html -// +// https://www.researchgate.net/figure/The-slab-method-for-ray-intersection-detection-15_fig3_283515372 aabb_result ray_aabb_intersection(Vector2 ray_origin, Vector2 ray_dir_inv_norm, std::array<Vector2, 2> box_minmax, std::array<uint8_t, 2> signs) { @@ -46,7 +58,7 @@ aabb_result ray_aabb_intersection(Vector2 ray_origin, Vector2 ray_dir_inv_norm, tmax = min(dmax, tmax); } - return { {ts[0], ts[1] }, tmin, tmax, tmin < tmax }; + return { {ts[0], ts[1] }, tmin < tmax }; } } // namespace |