Skip to content

Commit ab313cd

Browse files
committed
Fix ghost collisions in segment_intersects_convex()
1 parent 1cf573f commit ab313cd

File tree

2 files changed

+5
-0
lines changed

2 files changed

+5
-0
lines changed

core/math/geometry_3d.h

+4
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,10 @@ class Geometry3D {
292292
real_t den = p.normal.dot(dir);
293293

294294
if (Math::abs(den) <= (real_t)CMP_EPSILON) {
295+
if (p.is_point_over(p_from)) {
296+
// p is a separating plane.
297+
return false;
298+
}
295299
continue; // Ignore parallel plane.
296300
}
297301

tests/core/math/test_geometry_3d.h

+1
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ TEST_CASE("[Geometry3D] Does Segment Intersect Convex") {
160160
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 10), Vector3(0, 0, 0), &box_planes[0], box_planes.size(), &result, &normal) == true);
161161
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 10), Vector3(5, 5, 5), &box_planes[0], box_planes.size(), &result, &normal) == true);
162162
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 10), Vector3(6, 5, 5), &box_planes[0], box_planes.size(), &result, &normal) == false);
163+
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 0), Vector3(10, 0, 0), &box_planes[0], box_planes.size(), &result, &normal) == false);
163164
}
164165

165166
TEST_CASE("[Geometry3D] Segment Intersects Cylinder") {

0 commit comments

Comments
 (0)