build islands once and process islands arbitrary number of times in update constraints

This commit is contained in:
Xuchen Han
2019-08-13 14:37:45 -07:00
parent 9e6e571732
commit 07bf736aeb
7 changed files with 29 additions and 9 deletions

View File

@@ -428,13 +428,18 @@ void btMultiBodyDynamicsWorld::forwardKinematics()
void btMultiBodyDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo)
{
solveExternalForces(solverInfo);
buildIslands();
m_islandManager->buildAndProcessIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_solverMultiBodyIslandCallback);
solveInternalConstraints(solverInfo);
}
void btMultiBodyDynamicsWorld::buildIslands()
{
m_islandManager->buildAndProcessIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_solverMultiBodyIslandCallback);
m_islandManager->buildIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld());
}
void btMultiBodyDynamicsWorld::processIslands()
{
m_islandManager->processIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_solverMultiBodyIslandCallback);
}
void btMultiBodyDynamicsWorld::solveInternalConstraints(btContactSolverInfo& solverInfo)
@@ -1086,3 +1091,8 @@ void btMultiBodyDynamicsWorld::serializeMultiBodies(btSerializer* serializer)
}
}
}
void btMultiBodyDynamicsWorld::setSplitIslands(bool split)
{
m_islandManager->setSplitIslands(split);
}

View File

@@ -118,6 +118,8 @@ public:
virtual void solveExternalForces(btContactSolverInfo& solverInfo);
virtual void solveInternalConstraints(btContactSolverInfo& solverInfo);
void buildIslands();
void processIslands();
void setSplitIslands(bool split);
};
#endif //BT_MULTIBODY_DYNAMICS_WORLD_H