Merge pull request #350 from dimforge/broad-phase-fix

Fix some corner cases in the broad-phase
This commit is contained in:
Sébastien Crozet
2022-06-24 13:18:40 +02:00
committed by GitHub
2 changed files with 15 additions and 0 deletions

View File

@@ -352,8 +352,16 @@ impl BroadPhase {
.compute_aabb(co_pos)
.loosened(prediction_distance / 2.0);
if aabb.mins.coords.iter().any(|e| !e.is_finite())
|| aabb.maxs.coords.iter().any(|e| !e.is_finite())
{
// Reject AABBs with non-finite values.
return false;
}
aabb.mins = super::clamp_point(aabb.mins);
aabb.maxs = super::clamp_point(aabb.maxs);
let prev_aabb;
let layer_id = if let Some(proxy) = self.proxies.get_mut(*proxy_index) {

View File

@@ -240,6 +240,13 @@ impl SAPLayer {
let region_proxy = &mut proxies[region_id];
let region = region_proxy.data.as_region_mut();
// NOTE: sometimes, rounding errors will generate start/end indices
// that lie outside of the actual regions AABB.
// TODO: is there a smarter, more efficient way of dealing with this?
if !region_proxy.aabb.intersects(aabb_to_discretize) {
continue;
}
if let Some(actual_aabb) = actual_aabb {
// NOTE: if the actual AABB doesn't intersect the
// regions AABB, then we need to delete the