public static Matrix4X4 MakeFrustrum(float left, float right, float bottom, float top, float znear, float zfar)
{
Matrix4X4 ret = new Matrix4X4(null);
float rl = (right - left);
float tb = (top - bottom);
float fn = (zfar - znear);
ret.Elements[0] = (znear * 2) / rl;
ret.Elements[1] = 0;
ret.Elements[2] = 0;
ret.Elements[3] = 0;
ret.Elements[4] = 0;
ret.Elements[5] = (znear * 2) / tb;
ret.Elements[6] = 0;
ret.Elements[7] = 0;
ret.Elements[8] = (right + left) / rl;
ret.Elements[9] = (top + bottom) / tb;
ret.Elements[10] = -(zfar + znear) / fn;
ret.Elements[11] = -1;
ret.Elements[12] = 0;
ret.Elements[13] = 0;
ret.Elements[14] = -(zfar * znear * 2) / fn;
ret.Elements[15] = 0;
return ret;
}