[ODE] ODE - Constant speed in different qualities boxes
Megan Fox
shalinor at circustent.us
Wed Mar 17 10:41:46 MST 2004
> > If I was doing it properly, I would be running my entire game loop at a
> > fixed rate (so I would update EVERYTHING in the loop, once per
> loop, then
> > render at the end), but I'm not :)
> >
> > I do run the collision system once per loop, but I don't communicate the
> > position of the geoms to the "real" entities in my systems
> until the looping
> > has stopped. I think I might adjust this in the "real" engine
> such that I
> > run the entire system at a fixed rate - it would make it easier
> to retrofit
> > the engine to allow replays.
> >
>
> I tried this, both with clearing all the collision contacts after the
> first small ODE update and without. In both cases the result was
> terrible. My simulation jumped around and was in general much more
> unstable than it was before :(
Here is exactly how my update physics loop looks (apologies for that last
email, apparently there exists a button combo for "send mail" that I
accidentally pressed, meh):
(physTime is the time since the last frame passed into my UpdatePhysics
method)
while (physTime > PHYSICS_STEPSIZE)
{
// Update the collision data
nOpende::JointGroupEmpty(this->physColJointGroupId);
this->refPhysColSpace->Collide(this, this->PhysCollisionCallback);
// Step the world by frameTime (the amount of time since the last frame)
this->refPhysWorld->Step(PHYSICS_STEPSIZE);
physTime -= PHYSICS_STEPSIZE;
}
This results in no instability at all, and lets me tune exactly how often I
run physical steps - I typically have PHYSICS_STEPSIZE at 0.01. After this
is complete, I update the positions and orientations of the objects in my
side of the code and continue with the logic/rendering systems.
Incidentally, I'm using the wrapper for Nebula 2, thus the class-based
interface with ODE.
-Megan Fox
Lead Developer, Elium Project (http://www.elium.tk)
More information about the ODE
mailing list