summaryrefslogtreecommitdiffhomepage
path: root/editor/tests/raycast-test.cpp
diff options
context:
space:
mode:
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