public static Vector3 Multiply(Vector3 v, MatrixF m)
        {
            Vector3 n = Zero;

            n.X = (v.X * m[0, 0]) + (v.Y * m[1, 0]) + (v.Z * m[2, 0]) + m[3, 0];
            n.Y = (v.X * m[0, 1]) + (v.Y * m[1, 1]) + (v.Z * m[2, 1]) + m[3, 1];
            n.Z = (v.X * m[0, 2]) + (v.Y * m[1, 2]) + (v.Z * m[2, 2]) + m[3, 2];

            float w = (v.X * m[0, 3]) + (v.Y * m[1, 3]) + (v.Z * m[2, 3]) + m[3, 3];

            if (Math.Abs(w) > 0.001f)
            {
                n.X /= w;
                n.Y /= w;
                n.Z /= w;
            }

            return(n);
        }