[ODE] ODE with non-penetration constraint

Patrick Enoch Hendrix_ at gmx.net
Thu Jul 12 23:53:02 MST 2007

Hi Ruby,

the collider will return contact as soon as two objects overlap. So  
in order to keep (most of) the ball over the ground, it has to  
penetrate it.

Assume no other forces act on the objects (e.g. no gravity):

t=0: objects are apart. call collider -> no contacts
t=1: objects overlap. call collider -> get contacts -> generate  
constraint that will drive objects apart within 1 timestep (hard  
t=2: objects are apart again. Note: they still have their "escape  

) Make sure to set the "surface layer" to zero.
) A possible solution would be to enlarge the object, so the  
colliding proxy is larger than the object you render.
) Maybe it is possible to use implicit contacts (havent tried):
0) save state
1) step
2) collide (future contacts)
3) restore state, use "future contacts"
4) step

If you have other forces acting on the objects, the "hard contact"  
property might get lost.


On 11.07.2007, at 22:11, Huang Rubby wrote:

> Hi All,
> on ODE manual, it says, "ODE has hard contacts. This means that a  
> special non-penetration constraint is used whenever two bodies  
> collide."
> But in my simulation example, which basicly was a ball rolling on  
> ground, somehow, I read out the contact point position and found  
> the Z - direction (vertical)
> coordinates were -0.005. Which means the contact point was  
> underground. How did it happened? Since ODE has Hard contacts for  
> each collision.
> Any way to avoid such penetration? Thanks.
> Ruby
> _______________________________________________
> ODE mailing list
> ODE at ode.org
> http://ode.org/mailman/listinfo/ode

More information about the ODE mailing list