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:
@@ -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)
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user