Fix ghost collisions in segment_intersects_convex()

This commit is contained in:
Kaleb Reid 2025-05-04 22:20:48 -07:00
parent 1cf573f44d
commit a2b9fc08e3
2 changed files with 5 additions and 0 deletions

View file

@ -292,6 +292,10 @@ public:
real_t den = p.normal.dot(dir);
if (Math::abs(den) <= (real_t)CMP_EPSILON) {
if (p.is_point_over(p_from)) {
// Separating plane.
return false;
}
continue; // Ignore parallel plane.
}

View file

@ -160,6 +160,7 @@ TEST_CASE("[Geometry3D] Does Segment Intersect Convex") {
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 10), Vector3(0, 0, 0), &box_planes[0], box_planes.size(), &result, &normal) == true);
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 10), Vector3(5, 5, 5), &box_planes[0], box_planes.size(), &result, &normal) == true);
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 10), Vector3(6, 5, 5), &box_planes[0], box_planes.size(), &result, &normal) == false);
CHECK(Geometry3D::segment_intersects_convex(Vector3(10, 10, 0), Vector3(10, 0, 0), &box_planes[0], box_planes.size(), &result, &normal) == false);
}
TEST_CASE("[Geometry3D] Segment Intersects Cylinder") {