From e5590575a92c1ce5c8b3a43b97d554caaff90485 Mon Sep 17 00:00:00 2001 From: "erwin.coumans" Date: Wed, 23 Oct 2013 18:00:32 +0000 Subject: [PATCH] disable self-collision for btMultiBody with prismatic joint: the collision normals are conflicting (they assume 3d objects, but 2 bodies/links in a multi-body don't have the DOFs to resolve the collision, resulting in 'explosions' adding energy. --- .../FeatherstoneMultiBodyDemo.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp b/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp index 64b462353..7a4768b7d 100644 --- a/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp +++ b/Demos/FeatherstoneMultiBodyDemo/FeatherstoneMultiBodyDemo.cpp @@ -196,7 +196,9 @@ void FeatherstoneMultiBodyDemo::initPhysics() btMultiBodySettings settings; settings.m_numLinks = 2; settings.m_basePosition = btVector3 (60,29.5,-2)*scaling; - settings.m_isFixedBase = false; + settings.m_isFixedBase = false; + settings.m_disableParentCollision = true;//the self-collision has conflicting/non-resolvable contact normals + settings.m_usePrismatic = true; settings.m_canSleep = true; settings.m_createConstraints = true; @@ -217,7 +219,9 @@ void FeatherstoneMultiBodyDemo::initPhysics() settings.m_basePosition = btVector3 (-20,9.5,-settings.m_numLinks*4.f); settings.m_isFixedBase = true; - settings.m_usePrismatic = true; + settings.m_usePrismatic = true; + settings.m_disableParentCollision = true; + btMultiBody* mbPrim= createFeatherstoneMultiBody(world, settings); //btMultiBody* mbB = createFeatherstoneMultiBody(world, 15, btVector3 (0,29.5,-2), false,true,true);