From 9f559af2a8d25d275601471a6c4d9b1e6ca9d231 Mon Sep 17 00:00:00 2001 From: Xuchen Han Date: Mon, 19 Aug 2019 13:07:26 -0700 Subject: [PATCH] set m_contact_iterations to solverInfo.m_solverIterations --- src/BulletSoftBody/btDeformableBodySolver.cpp | 5 ++++- src/BulletSoftBody/btDeformableContactProjection.cpp | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/BulletSoftBody/btDeformableBodySolver.cpp b/src/BulletSoftBody/btDeformableBodySolver.cpp index b173aa53b..85730cc1e 100644 --- a/src/BulletSoftBody/btDeformableBodySolver.cpp +++ b/src/BulletSoftBody/btDeformableBodySolver.cpp @@ -21,7 +21,6 @@ btDeformableBodySolver::btDeformableBodySolver() : m_numNodes(0) , m_cg(50) -, m_contact_iterations(5) { m_objective = new btDeformableBackwardEulerObjective(m_softBodySet, m_backupVelocity); } @@ -79,12 +78,16 @@ void btDeformableBodySolver::setConstraints() { BT_PROFILE("setConstraint"); m_objective->setConstraints(); + // m_contact_iterations takes over m_numIterations + m_contact_iterations = m_objective->m_world->getSolverInfo().m_numIterations; for (int i = 0; i < m_contact_iterations; ++i) { m_objective->projection.update(); m_objective->enforceConstraint(m_dv); m_objective->updateVelocity(m_dv); } + // recover m_numIterations from m_contact_iterations + m_objective->m_world->getSolverInfo().m_numIterations = m_contact_iterations; } void btDeformableBodySolver::setWorld(btDeformableMultiBodyDynamicsWorld* world) diff --git a/src/BulletSoftBody/btDeformableContactProjection.cpp b/src/BulletSoftBody/btDeformableContactProjection.cpp index e03001c3f..ba8f74144 100644 --- a/src/BulletSoftBody/btDeformableContactProjection.cpp +++ b/src/BulletSoftBody/btDeformableContactProjection.cpp @@ -21,6 +21,7 @@ void btDeformableContactProjection::update() { ///solve rigid body constraints { + // m_numIterations get temporarily to 1 so that we interleave one step of multibody solve with one step of multibody/deformable contact solve m_world->getSolverInfo().m_numIterations = 1; m_world->processIslands(); m_world->btMultiBodyDynamicsWorld::solveInternalConstraints(m_world->getSolverInfo()); // process constraints deferred in the previous step