OBB intersection in 3D

Started by
0 comments, last by Zakwayda 17 years, 7 months ago
If i have 2 OBB's in 3D, how can i tell if they're intersecting? and after i find that they are, how can i find the intersection points? - i'm not sure how to define "intersection points" in 3D and maybe thats part of my problem, but basicly what i mean by IPs are the two points (one on each body) that need to be seperated in order to resolve the collision. there could be multiple sets of IP's for a given collision. For example, if a corner of one box goes into the side of another one there's one set of IPs - the corner of the first box and the point on the intersected plain of the second box that's closest to it. but if two faces collide there're should be 4 sets of IP's. In 2D this is easy, just check if the corners of one box are penetrating another one and use that corner and the closest point on the other box to get a set. but in 3D it's more complicated cause sides can touch without any corners penetrating. If something wasn't clear (i'm not that good at explaining things) please ask. Thanks for the help!
"We've all heard that a million monkeys banging on a million typewriters will eventually reproduce the entire works of Shakespeare. Now, thanks to the internet, we know this is not true." -- Professor Robert Silensky
Advertisement
The term to google for is 'separating axis theorem'. The boolean OBB SAT test is even covered (with code) in an article right here on gdnet. Look in the 'collision detection' section for an article called 'Simple Intersection Tests for Games', or something of that sort.

The algorithm can be extended naturally to find the contact points, although it can be a little involved to do so. In involves keeping track of and/or computing the support features along the minimum axis of separation, and then clipping these features together. The most common case (vertex-face) is trivial, while edge-face and face-face require a little more work.

One aspect that's often overlooked is degenerate cross-product axes when the boxes are nearly aligned in one or more dimensions (I don't think this is addressed in the aforementioned article), so keep this in mind when implementing the test.

This topic has been discussed in great detail in these forums in the past, including a recent thread started by starfleetrp (which should still be on the first 5 to 10 pages), and other threads going back a ways in which the above aspects were covered in detail along with illustrative diagrams.

As always, you might check out geometrictools.com, although some aspects of the OBB intersection code there are a little tricky to tease apart.

This topic is closed to new replies.

Advertisement