[ODE] damping functions
Daniel K. O.
danielko.listas at gmail.com
Sun Nov 25 17:13:30 MST 2007
Right before applying the changes, I went to look how Bullet does it.
Instead of calculating a damping force/torque, it just takes the
linear/angular velocities from the last timestep and multiply them by a
per-body damping factor. If the velocity is not above a lower bound, it
is zeroed.
Should we follow this approach? If we let the user specify a lower
bound, the current proposal gets a bit cumbersome:
dBodyDamp(body, linScale, linThreshold, angScale, angThreshold);
Considering that the thresholds will probably not change, it makes sense
to store them in the body; actually we already have them, in the
auto-disable feature; is there any reason for the user not wanting to
use auto-disabling while using the damping?
Other idea: global damping, much like the global auto-disable settings.
Is there any problem linking the damping to the auto-disabling? My idea
now is to make it like this:
// Defaults for newly created bodies
void dWorldSetLinearDamp(world, scale);
void dWorldSetAngularDamp(world, scale);
void dBodySetLinearDamp(body, scale); // for symmetry with get
void dBodySetAngularDamp(body, scale); // for symmetry with get
void dBodySetDamp(body, linearScale, angularScale); // convenience
// These just map to the auto-disable threshold functions,
// defined only for consistency.
void dWorldSetLinearDampThreshold(world, threshold);
void dWorldSetAngularDampThreshold(world, threshold);
void dBodySetLinearDampThreshold(body, threshold);
void dBodySetAngularDampThreshold(body, threshold);
Now the damping happens automatically during the step function.
Considering the damping helps the auto-disabling, it would be more
correct to add those functions to the AutoDisable group; but the
function names would be too long. :)
Please comment.
--
Daniel K. O.
"The only way to succeed is to build success yourself"
More information about the ODE
mailing list