Don't use separating axis theorem for this. It's overkill for spheres. Instead: 1. Use the OBB's orientation & translation information to inverse-transform the sphere's center into the box's local space. 2. Find the closest point on the box to this point. Now that you're working on the box's local axes, this is as simple as a component-wise clamp on each axis: `localSphereCenter = box.InverseTransformPoint(sphere.worldCenter)`<br/> `closest.x = max(box.localMin.x, min(localSphereCenter.x, box.localMax.x));`<br/> `... likewise for y, z` 3. Take the offset vector from this closest point to the sphere center. If it's shorter than your radius, the sphere intersects the box. The minimum translation vector (if the center is not in the box) is then this offset vector scaled to the remaining length: `translation = (sphere.radius - offset.length) * offset.normalized` If the sphere center is inside the box, then this displacement vector will be zero. You can clamp the point to the nearest face of the box, then form a penetration vector equal to the sphere center minus this closest face point. Your minimum translation vector is then: `translation = -1 * (sphere.radius + penetration.length) * penetration.normalized`