+ if(l==r || b==t || n<=0 || f<=n)
+ throw invalid_argument("Matrix::frustum");
+
+ Matrix result;
+ result(0, 0) = 2*n/(r-l);
+ result(1, 1) = 2*n/(t-b);
+ result(0, 2) = (r+l)/(r-l);
+ result(1, 2) = (t+b)/(t-b);
+ result(2, 2) = -(f+n)/(f-n);
+ result(3, 2) = -1;
+ result(2, 3) = -2*f*n/(f-n);
+ result(3, 3) = 0;
+ return result;