summaryrefslogtreecommitdiffhomepage
path: root/editor/tests/raycast-test.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2024-01-27 15:33:37 +0100
committerStanislaw Halik <sthalik@misaki.pl>2024-01-27 15:33:37 +0100
commit1f8212b0b34fe308b1515a15c1d99504f8bad5d2 (patch)
tree48b818b37008ad2494ad0753f991ff591d743951 /editor/tests/raycast-test.cpp
parent07d7c30d33a3adfc24031d63582ac0b7b71bd96b (diff)
w
Diffstat (limited to 'editor/tests/raycast-test.cpp')
-rw-r--r--editor/tests/raycast-test.cpp18
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