The variants of MPR used by XenoCollide and MPR2D don't return the minimum penetration depth
, nor do they return the normal of minimum penetration
These implementations of MPR rely on an interior point within each shape, usually near each shape's center.
Now, imagine that you pulled the overlapping shapes away from each other along the line connecting their center-points until the objects were just touching. This is the point of contact that the algorithm generates information about -- both contact normal and exact penetration depth (along the line between the interior points).
If you wanted to take the algorithm one step further, then once you found the contact normal, you could perform another search from the origin to the boundary of the CSO along the direction of the contact normal. This technique would provide a contact normal and penetration depth along this normal.
Neither of these variants produce the "minimum penetration depth". I created a variant of MPR that does, but I don't want to release it into the wild until I've proved it works in all cases.
Finding "minimum penetration depth" isn't necessary for stable (or correct) simulation. As the penetration is resolved, the origin moves towards the surface of the CSO and the MPR contact point and minimum depth contact point converge (i.e., they are the same for shallow penetration). When penetration is deep, the direction of minimum penetration is no more correct than the direction determined by MPR. In fact, a better direction would be the direction of relative velocity, which can be fed back into MPR to determine the penetration depth along the direction of relative velocity.
Generally speaking, MPR is very good at finding precise penetration depth in any direction -- but the published implementation does not find the minimum penetration depth, nor can it tell you the distance between two shapes that do not intersect.
---Xeno (Gary Snethen)http://xenocollide.com