Robustness of the Separating Axis Theorem
Currently, there is a flaw in our SAT implementation. You can see this flaw in action by testing two triangles that lay on the same plane. Let's assume that we run the SAT test with the following triangles:
- T1: (-2, -1, 0), (-3, 0, 0), (-1, 0, 0)
- T2: (2, 1, 0), (3, 0, 0), (1, 0, 0)
These two triangles will report a false positive. Visualizing them, they look like this:
Why does this happen? When we compute the cross products of the edges of the triangles, the cross product of parallel vectors is the zero vector. When edges or face normals are parallel, we end up with an invalid axis to test.
Getting ready
We are going to implement a new function, SatCrossEdge
. This function will detect if the cross product of two edges is 0. If that is the case, the function will use an axis perpendicular to the first edge to try to get a new test axis. If no such test axis exists, then the two edges being tested must be on a line. If the edges are on a line, we...