You mentioned using GJK, but that you stepped away from it because they were using things that are more complicated than boxes. Might I suggest that you stepped away too soon? Because GJK uses support maps, you can use GJK for any convex shape, including OBBs, for which a support mapping is defined. So, if you know how to define the support function for an OBB, you can use GJK without worry.
Not only can this help you for OBBs, but it will also be easy to expand the system to work with any two convex shapes for future projects, or if this project develops to require it.
Calculating a Support for an OBB
Given an input direction \$d\$ (converted to the OBB's local space), one way to calculate a support for an OBB would be to define a ray from the center of the OBB in the direction \$d\$. The support mapping could simply calculate which face the ray intersects and return any point on that face.
Another, simpler (but likely slightly more expensive) method would be to just take the dot product of \$d\$ (converted to the OBB's local space) with each of the eight corners of the OBB, and return the corner that yielded the largest dot product.
(Note that this method actually works for any convex shape that you define as a discrete collection of vertices. Something like a sphere or a capsule would require special operations to handle the smooth, curved surfaces.)
Vector3f d = /*OBB space direction*/;
Vector3f[] corners = /*The corners of the OBB in OBB space*/;
float maxDot = Float.NEGATIVE_INFINITY;
int maxDotIndex = -1;
for(int i = 0; i < corners.length; i++) {
dot = Vector3f.dot(corners[i], d);
if(dot > maxDot) {
maxDot = dot;
maxDotIndex = i;
}
}
return globalPositionOf(corners[maxIndex]);
From there, it's just vanilla GJK. Since we've defined a support function for an OBB, you can just learn GJK from the articles you were reading without having to worry about the complicated shapes at all. Some additional articles on GJK that helped me when I was learning it are here and here, and a working implementation of itGJK can be found here.