set m_contact_iterations to solverInfo.m_solverIterations

This commit is contained in:
Xuchen Han
2019-08-19 13:07:26 -07:00
parent 9af25430ac
commit 9f559af2a8
2 changed files with 5 additions and 1 deletions

View File

@@ -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)

View File

@@ -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