modify constraint setup so that contact constraints are persistent in a single CG solve but motor constraints are applied only once

This commit is contained in:
Xuchen Han
2019-08-08 14:25:01 -07:00
parent deb7c152c4
commit 26983b05e2
2 changed files with 9 additions and 3 deletions

View File

@@ -402,8 +402,8 @@ btMultiBody* GraspDeformable::createFeatherstoneMultiBody(btMultiBodyDynamicsWor
{ {
//init the base //init the base
btVector3 baseInertiaDiag(0.f, 0.f, 0.f); btVector3 baseInertiaDiag(0.f, 0.f, 0.f);
float baseMass = .1f; float baseMass = 1.f;
float linkMass = .1f; float linkMass = 1.f;
int numLinks = 2; int numLinks = 2;
if (baseMass) if (baseMass)

View File

@@ -375,10 +375,15 @@ struct MultiBodyInplaceSolverIslandCallback : public btSimulationIslandManager::
m_islandAnalyticsData.push_back(m_solver->m_analyticsData); m_islandAnalyticsData.push_back(m_solver->m_analyticsData);
} }
m_bodies.resize(0); m_bodies.resize(0);
m_manifolds.resize(0); // m_manifolds.resize(0);
m_constraints.resize(0); m_constraints.resize(0);
m_multiBodyConstraints.resize(0); m_multiBodyConstraints.resize(0);
} }
void clearContactConstraints()
{
m_manifolds.resize(0);
}
}; };
void btMultiBodyDynamicsWorld::getAnalyticsData(btAlignedObjectArray<btSolverAnalyticsData>& islandAnalyticsData) const void btMultiBodyDynamicsWorld::getAnalyticsData(btAlignedObjectArray<btSolverAnalyticsData>& islandAnalyticsData) const
@@ -430,6 +435,7 @@ void btMultiBodyDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo)
solveExternalForces(solverInfo); solveExternalForces(solverInfo);
buildIslands(); buildIslands();
solveInternalConstraints(solverInfo); solveInternalConstraints(solverInfo);
m_solverMultiBodyIslandCallback->clearContactConstraints();
} }
void btMultiBodyDynamicsWorld::buildIslands() void btMultiBodyDynamicsWorld::buildIslands()