public static Plane operator *( Matrix4 left, Plane plane )
{
Plane result = new Plane();
Vector3 planeNormal = plane.Normal;
result.Normal = new Vector3(
left.m00 * planeNormal.x + left.m01 * planeNormal.y + left.m02 * planeNormal.z,
left.m10 * planeNormal.x + left.m11 * planeNormal.y + left.m12 * planeNormal.z,
left.m20 * planeNormal.x + left.m21 * planeNormal.y + left.m22 * planeNormal.z );
Vector3 pt = planeNormal * -plane.D;
pt = left * pt;
result.D = -pt.Dot( result.Normal );
return result;
}