bool OBB::intersects(const OBB& box) const { float min1, max1, min2, max2; for (int i = 0; i < 3; i++) { getInterval(*this, getFaceDirection(i), min1, max1); getInterval(box, getFaceDirection(i), min2, max2); if (max1 < min2 || max2 < min1) return false; } for (int i = 0; i < 3; i++) { getInterval(*this, box.getFaceDirection(i), min1, max1); getInterval(box, box.getFaceDirection(i), min2, max2); if (max1 < min2 || max2 < min1) return false; } for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { Vec3 axis; Vec3::cross(getEdgeDirection(i), box.getEdgeDirection(j), &axis); getInterval(*this, axis, min1, max1); getInterval(box, axis, min2, max2); if (max1 < min2 || max2 < min1) return false; } } return true; }