inline mat4<T>& mat4<T>::CreateFrustum( T left, T right,
T bottom, T top,
T nearval, T farval)
{
T x, y, a, b, c, d;
x = (2*nearval) / (right-left);
y = (2*nearval) / (top-bottom);
a = (right+left) / (right-left);
b = (top+bottom) / (top-bottom);
c = -(farval+nearval) / ( farval-nearval);
d = -(2*farval*nearval) / (farval-nearval);
_11 = x; _21 = 0; _31 = a; _41 = 0;
_12 = 0; _22 = y; _32 = b; _42 = 0;
_13 = 0; _23 = 0; _33 = c; _43 = d;
_14 = 0; _24 = 0; _34 = -1; _44 = 0;
return *this;
}
inline mat4<T>& mat4<T>::CreatePerspectiveFrustum(T fovy, T aspect, T zNear, T zFar)
{
T xmin, xmax, ymin, ymax;
ymax = zNear * (T)tan((double)(fovy * M_PI / 360));
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
return CreateFrustum(xmin, xmax, ymin, ymax, zNear, zFar);
}