xiangaodielian / bullet

Automatically exported from code.google.com/p/bullet
Other
0 stars 0 forks source link

CF_NO_CONTACT_RESPONSE not honored if setSplitIslands set false #800

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
What steps will reproduce the problem?
1. Create a dynamics world (I was using btDiscreteDynamicsWorld).
2. Call getSimulationIslandManager()->setSplitIslands(false) on the world.
3. Create some number of objects with the flag CF_NO_CONTACT_RESPONSE.
4. Note that collisions with said objects impart impulse.

What is the expected output? What do you see instead?
Objects with the CF_NO_CONTACT_RESPONSE flag should not impart or receive 
impulse from other objects.

What version of the product are you using? On what operating system?
2.82-rev2704

Please provide any additional information below.
The problem seems to lie with 
btSimulationIslandManager::buildAndProcessIslands. In the case that 
m_splitIslands is FALSE, the entire list of manifolds is sent to the 
processIsland function of the callback. I am attaching a patch that seems to 
fix the issue by using the m_islandmanifold array to hold a list of only those 
objects that pass the needsResponse check. That was already the process with 
the default setting for split islands.

Original issue reported on code.google.com by drei...@atariland.net on 21 Mar 2014 at 4:06

Attachments:

GoogleCodeExporter commented 9 years ago
Moved to github issue tracker, 
https://github.com/bulletphysics/bullet3/issues/50

Original comment by erwin.coumans on 30 Mar 2014 at 4:44