aboutsummaryrefslogtreecommitdiff
path: root/src/geometry
diff options
context:
space:
mode:
authorCrozet Sébastien <developer@crozet.re>2021-01-05 15:34:48 +0100
committerCrozet Sébastien <developer@crozet.re>2021-01-05 15:34:48 +0100
commit00da4aaa42cc921bbd8c469b45c5c1e304f46260 (patch)
tree06327c571b90d09c3cb74c0b4d0a30ac219249f4 /src/geometry
parent6ba50813581e9cc87bcb93fef0d01e16065b976b (diff)
downloadrapier-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.rs6
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,