From 26983b05e2a9b2fd8fe7a6b69063fc187f89c357 Mon Sep 17 00:00:00 2001 From: Xuchen Han Date: Thu, 8 Aug 2019 14:25:01 -0700 Subject: [PATCH] modify constraint setup so that contact constraints are persistent in a single CG solve but motor constraints are applied only once --- examples/GraspDeformable/GraspDeformable.cpp | 4 ++-- .../Featherstone/btMultiBodyDynamicsWorld.cpp | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/examples/GraspDeformable/GraspDeformable.cpp b/examples/GraspDeformable/GraspDeformable.cpp index 7d42ffa43..68a52be7e 100644 --- a/examples/GraspDeformable/GraspDeformable.cpp +++ b/examples/GraspDeformable/GraspDeformable.cpp @@ -402,8 +402,8 @@ btMultiBody* GraspDeformable::createFeatherstoneMultiBody(btMultiBodyDynamicsWor { //init the base btVector3 baseInertiaDiag(0.f, 0.f, 0.f); - float baseMass = .1f; - float linkMass = .1f; + float baseMass = 1.f; + float linkMass = 1.f; int numLinks = 2; if (baseMass) diff --git a/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp b/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp index f5a7a7f1e..602c94926 100644 --- a/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp +++ b/src/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp @@ -375,10 +375,15 @@ struct MultiBodyInplaceSolverIslandCallback : public btSimulationIslandManager:: m_islandAnalyticsData.push_back(m_solver->m_analyticsData); } m_bodies.resize(0); - m_manifolds.resize(0); +// m_manifolds.resize(0); m_constraints.resize(0); m_multiBodyConstraints.resize(0); } + + void clearContactConstraints() + { + m_manifolds.resize(0); + } }; void btMultiBodyDynamicsWorld::getAnalyticsData(btAlignedObjectArray& islandAnalyticsData) const @@ -430,6 +435,7 @@ void btMultiBodyDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo) solveExternalForces(solverInfo); buildIslands(); solveInternalConstraints(solverInfo); + m_solverMultiBodyIslandCallback->clearContactConstraints(); } void btMultiBodyDynamicsWorld::buildIslands()