
you have to be careful because the projections are scaled by the length of the projection axis.
What you can do us calculate the MTD, by multiplying the projection overlap (or separation) by the axis itself and dividing by the square of the axis length. Something like that...
bool Intersect(OBB BoxA, OBB BoxB, Vector& MTD)
{
float mindist2 = 1;
MTD = Vector(0, 0, 0);
// 15 sep axes.
for(int i = 0; i < 15; i ++)
{
Vector Axis = GetSepAxis(i, BoxA, BoxB);
float a2 = Axis.Dot(Axis);
if (a2 < 1.0E7f)
{
continue;
}
float mina, maxa;
float minb, maxb;
BoxA.CalculateInterval(Axis, mina, maxa);
BoxB.CalculateInterval(Axis, minb, maxb);
float d0 = mina  maxb;
float d1 = maxa  minb;
if (d0 > 0  d1 < 0)
{
return false; // no overlap
}
float d = (d0 < d1)? d0 : d1;
Vector Sep = Axis * (d / a2);
float s2 = Sep.Dot(Sep);
if (mindist2 < 0  s2 < mindist2)
{
mindist2 = s2;
MTD = Sep;
}
}
return true;
}

that would be for an intersection, but for a mindist, you have to be careful, I don't thing the SAT can be used in the same way, or only to get an approximation of distance.
