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