1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| | void gldPerspective(GLdouble fovx, GLdouble aspect, GLdouble zNear, GLdouble zFar)
{
GLdouble xmin, xmax, ymin, ymax;
GLdouble m[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
xmax = zNear * tan(fovx * M_PI / 360.0);
xmin = -xmax;
ymin = xmin / aspect;
ymax = xmax / aspect;
M(0,0) = (2.0 * zNear) / (xmax - xmin);
M(1,1) = (2.0 * zNear) / (ymax - ymin);
M(2,2) = -(zFar + zNear) / (zFar - zNear);
M(0,2) = (xmax + xmin) / (xmax - xmin);
M(1,2) = (ymax + ymin) / (ymax - ymin);
M(3,2) = -1.0;
M(2,3) = -(2.0 * zFar * zNear) / (zFar - zNear);
glMultMatrixd(m);
} |