[ODE] box-box collisions

Peter Amstutz tetron at interreality.org
Fri Oct 25 01:34:09 2002


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Okay, so I've spent a little time looking at the box-box collision code.
Detecting face-face contacts seems fairly easy; we just need to compare
the normal vector between the boxes centers in the collision with the
normal vector of the normal vectors of the sides of the penatrating box.
In other words, determine if they share a coplanar face.  Then we need to
generate contact points (I haven't quite figured this part out yet).

I have a few questions.  The first is that in doing this comparison, there
is enough error floating around that it is very unlikely that the normals
of box faces that should be treated as coplanar will be *exactly* the
same.  In general, what is the policy in ODE for handling these sorts of
slightly inexact comparisons?

The second question is face-edge collisions.  What's a good way of
determining if a line (the edge) lies in the plane of the face?  Again,
this has to be a slightly inexact comparison rather than an exact
calculation because of error.  I've determined that face-edge collisions
are absolutely crucial for good box stacking, since otherwise it becomes
almost impossible for one box to come to rest upon another if the first
one hits the supporting box at an angle.  Face-edge contacts need two
contact joints, otherwise boxes will just tumble uncontrolably.

I'm going to take a look at the box-plane collision code tomorrow, since
it must already handle these issues correctly, perhaps differently (having
an object that is infinite and static does make certain calculations
easier!)

[   Peter Amstutz   ][ amstutz@cs.umass.edu ][ tetron@interreality.org  ]
[Lead Programmer][Interreality Project][Virtual Reality for the Internet]
[ VOS: Next Generation Internet Communication][ http://interreality.org ]
[ http://interreality.org/~tetron ][ pgpkey:  pgpkeys.mit.edu  18C21DF7 ]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.7 (GNU/Linux)

iD8DBQE9uQHBaeHUyhjCHfcRArq1AKCwBhNnJJ31E9GYdocpzCJgp3vkOQCfRmlS
MLWLUFenllq0HRzWXDWrbjs=
=l4iZ
-----END PGP SIGNATURE-----