diff options
author | erwincoumans <erwin.coumans@gmail.com> | 2018-01-09 10:10:36 -0800 |
---|---|---|
committer | erwincoumans <erwin.coumans@gmail.com> | 2018-01-09 10:10:36 -0800 |
commit | e138e85bcaa90d87a056b6d5e0484e93ee3dc4b0 (patch) | |
tree | 379c40974082d4695f1c7fa0f0bceda455c74769 /src/BulletCollision/CollisionDispatch | |
parent | bf6d805228b542334004265896b501a8f38c3e40 (diff) | |
download | bullet3-e138e85bcaa90d87a056b6d5e0484e93ee3dc4b0.tar.gz |
allow to enable/disable implicit cylinder conversion through an API
p.loadURDF("r2d2.urdf", flags=p.URDF_USE_IMPLICIT_CYLINDER)
allow to enable/disable deterministicOverlappingPairs through an API
p.setPhysicsEngineParameter(deterministicOverlappingPairs = False)
Diffstat (limited to 'src/BulletCollision/CollisionDispatch')
-rw-r--r-- | src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp b/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp index 1f0067d3e..f849e31e3 100644 --- a/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp +++ b/src/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp @@ -334,8 +334,11 @@ void btSimulationIslandManager::buildIslands(btDispatcher* dispatcher,btCollisio for (i=0;i<maxNumManifolds ;i++) { btPersistentManifold* manifold = dispatcher->getManifoldByIndexInternal(i); - if (manifold->getNumContacts() == 0) - continue; + if (collisionWorld->getDispatchInfo().m_deterministicOverlappingPairs) + { + if (manifold->getNumContacts() == 0) + continue; + } const btCollisionObject* colObj0 = static_cast<const btCollisionObject*>(manifold->getBody0()); const btCollisionObject* colObj1 = static_cast<const btCollisionObject*>(manifold->getBody1()); @@ -397,12 +400,15 @@ void btSimulationIslandManager::buildAndProcessIslands(btDispatcher* dispatcher, //tried a radix sort, but quicksort/heapsort seems still faster //@todo rewrite island management - - //m_islandmanifold.quickSort(btPersistentManifoldSortPredicate()); - //btPersistentManifoldSortPredicateDeterministic sorts contact manifolds based on islandid, //but also based on object0 unique id and object1 unique id - m_islandmanifold.quickSort(btPersistentManifoldSortPredicateDeterministic()); + if (collisionWorld->getDispatchInfo().m_deterministicOverlappingPairs) + { + m_islandmanifold.quickSort(btPersistentManifoldSortPredicateDeterministic()); + } else + { + m_islandmanifold.quickSort(btPersistentManifoldSortPredicate()); + } //m_islandmanifold.heapSort(btPersistentManifoldSortPredicate()); |