Closed GoogleCodeExporter closed 8 years ago
This seemed like a cache problem to me, and after reading the User Manual more
closely, I decided the btPersistentManifold was a likely place to look. I've
managed to resolve the problem by manually clearing all contact manifolds after
the sphere resize. This feels a bit heavy-handed. I could probably check for
any manifolds involving that particular body and clear those.
I've attached a patch for my fix. Building and running the patched HelloWorld
demo with four arguments (ie. `./AppHelloWorld a b c d`) will show that the
sphere does fall to a final height of 0.5 after clearing the manifolds.
Is this the intended behavior? It seems like the resize should trigger a change
in the bounding box, which should cause the broadphase to notice that there's
no longer any overlap, and thus tell the dispatcher to remove the cached
contact points.
Original comment by scpet...@osrfoundation.org
on 31 Jan 2013 at 8:19
Attachments:
Before you make any change to the collision shape (replace shape, resize etc)
you need to
1) remove the rigid body from the world
2) make the change (resize etc)
3) re-insert the body into the world
Alternatively you can flush the contact points manually for the object involved:
dynamicsWorld->getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(body->getBroadphaseHandle(), dynamicsWorld->getDispatcher());
Original comment by erwin.coumans
on 31 Jan 2013 at 8:31
Ok, thanks very much. I probably should have posted this to the forum. You can
mark this issue as not a bug.
Original comment by scpet...@osrfoundation.org
on 31 Jan 2013 at 8:39
it is valid feedback. Such things should be made clear in the API,
documentation/manual/faq, because many Bullet users run into this issue.
Original comment by erwin.coumans
on 31 Jan 2013 at 8:59
See https://github.com/bulletphysics/bullet3/issues/102
Original comment by erwin.coumans
on 30 Mar 2014 at 6:22
i=000 sphere posY = 1.997222 i=002 sphere posY = 1.983333 i=004 sphere posY = 1.958333 i=006 sphere posY = 1.922222 i=008 sphere posY = 1.875000 i=010 sphere posY = 1.816667 i=012 sphere posY = 1.747222 i=014 sphere posY = 1.666667 i=016 sphere posY = 1.575000 i=018 sphere posY = 1.472222 i=020 sphere posY = 1.358333 i=022 sphere posY = 1.233333 i=024 sphere posY = 1.097222 i=026 sphere posY = 1.000002 i=028 sphere posY = 1.000002 i=030 sphere posY = 1.000002 i=032 sphere posY = 1.000002 i=034 sphere posY = 1.000002 i=036 sphere posY = 1.000000 i=038 sphere posY = 1.000000 i=040 sphere posY = 1.000000 i=042 sphere posY = 1.000000 i=044 sphere posY = 1.000000 i=046 sphere posY = 1.000000 i=048 sphere posY = 1.000000 i=050 sphere posY = 1.000000 i=052 sphere posY = 1.000000 i=054 sphere posY = 1.000000 i=056 sphere posY = 1.000000 i=058 sphere posY = 1.000000 i=060 sphere posY = 1.000001 i=062 sphere posY = 1.000001 i=064 sphere posY = 1.000001 i=066 sphere posY = 1.000001 i=068 sphere posY = 1.000001 i=070 sphere posY = 1.000001 i=072 sphere posY = 1.000001 i=074 sphere posY = 0.999999 i=076 sphere posY = 0.999999 i=078 sphere posY = 0.999999 i=080 sphere posY = 0.999997 i=082 sphere posY = 0.999996 i=084 sphere posY = 0.999998 i=086 sphere posY = 0.999999 i=088 sphere posY = 0.999999 i=090 sphere posY = 0.999999 i=092 sphere posY = 0.999999 i=094 sphere posY = 0.999999 i=096 sphere posY = 0.999999 i=098 sphere posY = 0.999999
i=000 sphere posY = 1.997222 i=002 sphere posY = 1.983333 i=004 sphere posY = 1.958333 i=006 sphere posY = 1.922222 i=008 sphere posY = 1.875000 i=010 sphere posY = 1.816667 i=012 sphere posY = 1.747222 i=014 sphere posY = 1.666667 i=016 sphere posY = 1.575000 i=018 sphere posY = 1.472222 i=020 sphere posY = 1.358333 resize sphere i=022 sphere posY = 1.233333 i=024 sphere posY = 1.097222 i=026 sphere posY = 0.950000 i=028 sphere posY = 0.791667 i=030 sphere posY = 0.622222 i=032 sphere posY = 0.441667 i=034 sphere posY = 0.490666 i=036 sphere posY = 0.494026 i=038 sphere posY = 0.496176 i=040 sphere posY = 0.497552 i=042 sphere posY = 0.498433 i=044 sphere posY = 0.498997 i=046 sphere posY = 0.499359 i=048 sphere posY = 0.499589 i=050 sphere posY = 0.499737 i=052 sphere posY = 0.499832 i=054 sphere posY = 0.499892 i=056 sphere posY = 0.499931 i=058 sphere posY = 0.499956 i=060 sphere posY = 0.499972 i=062 sphere posY = 0.499983 i=064 sphere posY = 0.499989 i=066 sphere posY = 0.499991 i=068 sphere posY = 0.499995 i=070 sphere posY = 0.499996 i=072 sphere posY = 0.499996 i=074 sphere posY = 0.499996 i=076 sphere posY = 0.499997 i=078 sphere posY = 0.499998 i=080 sphere posY = 0.499999 i=082 sphere posY = 0.499999 i=084 sphere posY = 0.499999 i=086 sphere posY = 0.499999 i=088 sphere posY = 0.499999 i=090 sphere posY = 0.499999 i=092 sphere posY = 0.499999 i=094 sphere posY = 0.499999 i=096 sphere posY = 0.499999 i=098 sphere posY = 0.499999
i=000 sphere posY = 1.997222 i=002 sphere posY = 1.983333 i=004 sphere posY = 1.958333 i=006 sphere posY = 1.922222 i=008 sphere posY = 1.875000 i=010 sphere posY = 1.816667 i=012 sphere posY = 1.747222 i=014 sphere posY = 1.666667 i=016 sphere posY = 1.575000 i=018 sphere posY = 1.472222 i=020 sphere posY = 1.358333 i=022 sphere posY = 1.233333 i=024 sphere posY = 1.097222 i=026 sphere posY = 1.000002 i=028 sphere posY = 1.000002 i=030 sphere posY = 1.000002 i=032 sphere posY = 1.000002 i=034 sphere posY = 1.000002 i=036 sphere posY = 1.000000 i=038 sphere posY = 1.000000 i=040 sphere posY = 1.000000 resize sphere i=042 sphere posY = 1.000000 i=044 sphere posY = 1.000000 i=046 sphere posY = 1.000000 i=048 sphere posY = 1.000000 i=050 sphere posY = 1.000000 i=052 sphere posY = 1.000000 i=054 sphere posY = 1.000000 i=056 sphere posY = 1.000000 i=058 sphere posY = 1.000000 i=060 sphere posY = 1.000000 i=062 sphere posY = 1.000000 i=064 sphere posY = 1.000000 i=066 sphere posY = 1.000000 i=068 sphere posY = 1.000000 i=070 sphere posY = 1.000000 i=072 sphere posY = 1.000000 i=074 sphere posY = 1.000000 i=076 sphere posY = 1.000000 i=078 sphere posY = 1.000000 i=080 sphere posY = 1.000000 i=082 sphere posY = 1.000000 i=084 sphere posY = 1.000000 i=086 sphere posY = 1.000000 i=088 sphere posY = 1.000000 i=090 sphere posY = 1.000000 i=092 sphere posY = 1.000000 i=094 sphere posY = 1.000000 i=096 sphere posY = 1.000000 i=098 sphere posY = 1.000000
i=000 sphere posY = 1.997222 i=002 sphere posY = 1.983333 i=004 sphere posY = 1.958333 i=006 sphere posY = 1.922222 i=008 sphere posY = 1.875000 i=010 sphere posY = 1.816667 i=012 sphere posY = 1.747222 i=014 sphere posY = 1.666667 i=016 sphere posY = 1.575000 i=018 sphere posY = 1.472222 i=020 sphere posY = 1.358333 i=022 sphere posY = 1.233333 i=024 sphere posY = 1.097222 i=026 sphere posY = 1.000002 i=028 sphere posY = 1.000002 i=030 sphere posY = 1.000002 i=032 sphere posY = 1.000002 i=034 sphere posY = 1.000002 i=036 sphere posY = 1.000000 i=038 sphere posY = 1.000000 i=040 sphere posY = 1.000000 resize sphere i=042 sphere posY = 1.000000 i=044 sphere posY = 1.000000 i=046 sphere posY = 1.000000 i=048 sphere posY = 1.000000 i=050 sphere posY = 1.000000 i=052 sphere posY = 1.000000 i=054 sphere posY = 1.000000 i=056 sphere posY = 1.000000 i=058 sphere posY = 1.000000 i=060 sphere posY = 1.000000 perturbed sphere i=062 sphere posY = 1.025000 i=064 sphere posY = 1.038889 i=066 sphere posY = 1.041667 i=068 sphere posY = 1.033334 i=070 sphere posY = 1.013889 i=072 sphere posY = 0.983334 i=074 sphere posY = 0.941667 i=076 sphere posY = 0.888889 i=078 sphere posY = 0.825000 i=080 sphere posY = 0.750000 i=082 sphere posY = 0.663889 i=084 sphere posY = 0.566667 i=086 sphere posY = 0.500002 i=088 sphere posY = 0.499996 i=090 sphere posY = 0.499997 i=092 sphere posY = 0.499995 i=094 sphere posY = 0.499996 i=096 sphere posY = 0.499997 i=098 sphere posY = 0.499995
Original issue reported on code.google.com by
scpet...@osrfoundation.org
on 4 Jan 2013 at 1:15Attachments: