Merge pull request #106084 from Kaleb-Reid/fix-geometry-3d

Fix ghost collisions in segment_intersects_convex()
This commit is contained in:
Thaddeus Crews 2025-10-03 12:01:02 -05:00
commit 00f8f62be7
No known key found for this signature in database
GPG key ID: 8C6E5FEB5FC03CCC
2 changed files with 5 additions and 0 deletions

View file

@ -292,6 +292,10 @@ public:
real_t den = p.normal.dot(dir); real_t den = p.normal.dot(dir);
if (Math::abs(den) <= (real_t)CMP_EPSILON) { if (Math::abs(den) <= (real_t)CMP_EPSILON) {
if (p.is_point_over(p_from)) {
// Separating plane.
return false;
}
continue; // Ignore parallel plane. 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(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(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, 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") { TEST_CASE("[Geometry3D] Segment Intersects Cylinder") {