diff options
| author | Crozet Sébastien <developer@crozet.re> | 2021-01-05 15:34:48 +0100 |
|---|---|---|
| committer | Crozet Sébastien <developer@crozet.re> | 2021-01-05 15:34:48 +0100 |
| commit | 00da4aaa42cc921bbd8c469b45c5c1e304f46260 (patch) | |
| tree | 06327c571b90d09c3cb74c0b4d0a30ac219249f4 /src/geometry | |
| parent | 6ba50813581e9cc87bcb93fef0d01e16065b976b (diff) | |
| download | rapier-00da4aaa42cc921bbd8c469b45c5c1e304f46260.tar.gz rapier-00da4aaa42cc921bbd8c469b45c5c1e304f46260.tar.bz2 rapier-00da4aaa42cc921bbd8c469b45c5c1e304f46260.zip | |
Add compound shape support.
Diffstat (limited to 'src/geometry')
| -rw-r--r-- | src/geometry/narrow_phase.rs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/geometry/narrow_phase.rs b/src/geometry/narrow_phase.rs index 3fda8a6..5171f1b 100644 --- a/src/geometry/narrow_phase.rs +++ b/src/geometry/narrow_phase.rs @@ -13,6 +13,7 @@ use crate::geometry::{ColliderSet, ContactManifold, ContactPair, InteractionGrap use crate::math::{Real, Vector}; use crate::pipeline::EventHandler; use cdl::query::{DefaultQueryDispatcher, PersistentQueryDispatcher}; +use cdl::utils::IsometryOpt; use std::collections::HashMap; use std::sync::Arc; @@ -522,10 +523,11 @@ impl NarrowPhase { let mut has_any_active_contact = false; for manifold in &mut pair.manifolds { + let world_pos1 = manifold.subshape_pos1.prepend_to(co1.position()); manifold.data.solver_contacts.clear(); manifold.data.body_pair = BodyPair::new(co1.parent(), co2.parent()); manifold.data.solver_flags = solver_flags; - manifold.data.normal = co1.position() * manifold.local_n1; + manifold.data.normal = world_pos1 * manifold.local_n1; // Sort contacts to keep only these with distances bellow // the prediction, and generate solver contacts. @@ -536,7 +538,7 @@ impl NarrowPhase { if contact.dist < prediction_distance { // Generate the solver contact. let solver_contact = SolverContact { - point: co1.position() * contact.local_p1 + point: world_pos1 * contact.local_p1 + manifold.data.normal * contact.dist / 2.0, dist: contact.dist, friction: (co1.friction + co2.friction) / 2.0, |
