[ODE] Collider_Trimesh_Sphere

Marco Grubert mgrubert at conitec.net
Mon Apr 25 20:03:10 MST 2005


Could someone familiar with the Trimesher-Sphere collider please explain the 
contact calculation ?
In particular, I think that the contact->depth value is wrong and the 
contact->normal calculation seems odd:

GetContactData() calculates the closest feature distance between a sphere 
and a triangle and also returns the triangle normal. Let's assume the sphere 
contains one of the triangle vertices and the sphere center is in the 
triangle plane, but the triangle center is not inside the triangle. In that 
case the calculated distance is _not_ the distance along the 
triangle/contact normal but instead the distance along a normalized vector 
from that vertex to the sphere center. As long as the triangle center can be 
projected onto the triangle itself the calculation is correct, but it seems 
to be off in the general case.

In dCollideSTL all contacts are merged by default. For this all normals are 
scaled by the contact depth, added together and then the following 
calculations are performed:
  // Remember to divide in square space.
  Contact->depth = dSqrt(dDOT(Contact->normal, Contact->normal) / 
OutTriCount);
  dNormalize3(Contact->normal);

Why is the division done in "square space" as opposed to dividing the 
magnitude (not squared!) by OutTriCount ?

Thanks,
  Marco Grubert 



More information about the ODE mailing list