logic bug in (de)activation/island management: deactivated 'fantom' objects do merge islands, in particular when connected by constraints. (fantom = object with collision detection but no collision response).

This commit is contained in:
erwin.coumans
2008-09-23 04:57:20 +00:00
parent 965ef932e9
commit d7b635cabf
2 changed files with 3 additions and 3 deletions

View File

@@ -105,7 +105,7 @@ void btSimulationIslandManager::storeIslandActivationState(btCollisionWorld* col
for (i=0;i<colWorld->getCollisionObjectArray().size();i++) for (i=0;i<colWorld->getCollisionObjectArray().size();i++)
{ {
btCollisionObject* collisionObject= colWorld->getCollisionObjectArray()[i]; btCollisionObject* collisionObject= colWorld->getCollisionObjectArray()[i];
if (collisionObject->mergesSimulationIslands()) if (!collisionObject->isStaticOrKinematicObject())
{ {
collisionObject->setIslandTag( m_unionFind.find(index) ); collisionObject->setIslandTag( m_unionFind.find(index) );
collisionObject->setCompanionId(-1); collisionObject->setCompanionId(-1);

View File

@@ -688,8 +688,8 @@ void btDiscreteDynamicsWorld::calculateSimulationIslands()
const btRigidBody* colObj0 = &constraint->getRigidBodyA(); const btRigidBody* colObj0 = &constraint->getRigidBodyA();
const btRigidBody* colObj1 = &constraint->getRigidBodyB(); const btRigidBody* colObj1 = &constraint->getRigidBodyB();
if (((colObj0) && ((colObj0)->mergesSimulationIslands())) && if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
((colObj1) && ((colObj1)->mergesSimulationIslands()))) ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
{ {
if (colObj0->isActive() || colObj1->isActive()) if (colObj0->isActive() || colObj1->isActive())
{ {