CCD: take angular motion and penetration depth into account in various thresholds.
This commit is contained in:
@@ -660,6 +660,14 @@ impl ColliderBuilder {
|
||||
|
||||
/// Sets the initial position (translation and orientation) of the collider to be created,
|
||||
/// relative to the rigid-body it is attached to.
|
||||
pub fn position_wrt_parent(mut self, pos: Isometry<Real>) -> Self {
|
||||
self.delta = pos;
|
||||
self
|
||||
}
|
||||
|
||||
/// Sets the initial position (translation and orientation) of the collider to be created,
|
||||
/// relative to the rigid-body it is attached to.
|
||||
#[deprecated(note = "Use `.position_wrt_parent` instead.")]
|
||||
pub fn position(mut self, pos: Isometry<Real>) -> Self {
|
||||
self.delta = pos;
|
||||
self
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::dynamics::{BodyPair, RigidBodyHandle};
|
||||
use crate::geometry::{ColliderPair, ContactManifold};
|
||||
use crate::geometry::{ColliderPair, Contact, ContactManifold};
|
||||
use crate::math::{Point, Real, Vector};
|
||||
use parry::query::ContactManifoldsWorkspace;
|
||||
|
||||
@@ -76,6 +76,35 @@ impl ContactPair {
|
||||
workspace: None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Finds the contact with the smallest signed distance.
|
||||
///
|
||||
/// If the colliders involved in this contact pair are penetrating, then
|
||||
/// this returns the contact with the largest penetration depth.
|
||||
///
|
||||
/// Returns a reference to the contact, as well as the contact manifold
|
||||
/// it is part of.
|
||||
pub fn find_deepest_contact(&self) -> Option<(&ContactManifold, &Contact)> {
|
||||
let mut deepest = None;
|
||||
|
||||
for m2 in &self.manifolds {
|
||||
let deepest_candidate = m2.find_deepest_contact();
|
||||
|
||||
deepest = match (deepest, deepest_candidate) {
|
||||
(_, None) => deepest,
|
||||
(None, Some(c2)) => Some((m2, c2)),
|
||||
(Some((m1, c1)), Some(c2)) => {
|
||||
if c1.dist <= c2.dist {
|
||||
Some((m1, c1))
|
||||
} else {
|
||||
Some((m2, c2))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
deepest
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
|
||||
Reference in New Issue
Block a user