public static BoundingBox Expand(this IBoundingBox boundingBox, float factor = 0.1f)
{
if (boundingBox == null) { throw new ArgumentNullException("boundingBox"); }
vec3 min = boundingBox.MinPosition;
vec3 max = boundingBox.MaxPosition;
if (boundingBox.MaxPosition.x < min.x) { min.x = boundingBox.MaxPosition.x; }
if (boundingBox.MaxPosition.y < min.y) { min.y = boundingBox.MaxPosition.y; }
if (boundingBox.MaxPosition.z < min.z) { min.z = boundingBox.MaxPosition.z; }
if (max.x < boundingBox.MinPosition.x) { max.x = boundingBox.MinPosition.x; }
if (max.y < boundingBox.MinPosition.y) { max.y = boundingBox.MinPosition.y; }
if (max.z < boundingBox.MinPosition.z) { max.z = boundingBox.MinPosition.z; }
vec3 vector = (max - min);
vector *= (1 + factor);
vec3 newMax = min + vector;
vec3 newMin = max - vector;
return new BoundingBox(newMin, newMax);
}