[ODE] Auto Disable Improvement patch #1586738

John Miles jmiles at pop.net
Tue Oct 31 10:05:28 MST 2006

IMO the real problem with ODE's auto-disabling feature is that it looks at
instantaneous velocity to see if an object should be disabled, and not a
historical average.  This causes not only the "apogee suspension" problem
you mention (which can be worked around with dBodySetAutoDisableTime()), but
also prevents objects with poor contact solutions from disabling themselves.
The usual example is something twitching and jittering on the ground when it
should be at rest.  The object's average velocity is near zero, since it
isn't actually going anywhere, but its instantaneous velocity can be high
enough to keep it from going to sleep.

It's not exactly urgent but if someone's tinkering with
dInternalHandleAutoDisabling(), this may be worth thinking about.

-- john

> Francisco has submitted a patch among his seemingly hundreds of other
> fixes and improvements that I think is similarly beneficial, but may
> have been lost in all of the confusion!
> I'm refering to this patch:
> http://sourceforge.net/tracker/index.php?func=detail&aid=1586738&g

Which prevents a body from disabling unless it has at least one joint
(of any type) attached to it. As the patch describes, this should fix
the case where a projectile in flight reaches the top of it's porabola
and is ready to start it's descent under gravity - when the
auto-disable tolerances kick in and suspend it in mid air.

With this simple patch applied you should be able to prevent this
happening and allow you to raise the global disable velocities, etc.
thus potentially improving performance.

More information about the ODE mailing list