public static Matrix4F Ortho(float left, float right, float bottom, float top, float near, float far)
        {
            var matrix = default(Matrix4F);
            var rml    = right - left;
            var fmn    = far - near;
            var tmb    = top - bottom;

            // ReSharper disable CompareOfFloatsByEqualityOperator
            if (rml == 0.0 || fmn == 0.0 || tmb == 0.0)
            {
                throw new Exception("Invalid matrix");
            }

            var _1OverRml = 1.0f / rml;
            var _1OverFmn = 1.0f / fmn;
            var _1OverTmb = 1.0f / tmb;

            matrix.Row0 = Vector4f.Create(2.0f * _1OverRml, 0, 0, 0);
            matrix.Row1 = Vector4f.Create(0, 2.0f * _1OverTmb, 0, 0);
            matrix.Row2 = Vector4f.Create(0, 0, -2.0f * _1OverFmn, 0);
            matrix.Row3 = Vector4f.Create(
                -(right + left) * _1OverRml,
                -(top + bottom) * _1OverTmb,
                -(far + near) * _1OverFmn,
                1.0f
                );

            return(matrix);
        }
 public Vector4f Column(int n)
 {
     return(Vector4f.Create(Row0[n], Row1[n], Row2[n], Row3[n]));
 }