public void TransformAffine(Matrix4 m)
{
Debug.Assert(m.IsAffine);
// Do nothing if current null or infinite
if (this.isNull || this.isInfinite)
{
return;
}
Vector3 centre = Center;
Vector3 halfSize = HalfSize;
Vector3 newCentre = m.TransformAffine(centre);
var newHalfSize =
new Vector3(
Utility.Abs(m[0, 0]) * halfSize.x + Utility.Abs(m[0, 1]) * halfSize.y + Utility.Abs(m[0, 2]) * halfSize.z,
Utility.Abs(m[1, 0]) * halfSize.x + Utility.Abs(m[1, 1]) * halfSize.y + Utility.Abs(m[1, 2]) * halfSize.z,
Utility.Abs(m[2, 0]) * halfSize.x + Utility.Abs(m[2, 1]) * halfSize.y + Utility.Abs(m[2, 2]) * halfSize.z);
SetExtents(newCentre - newHalfSize, newCentre + newHalfSize);
}