Это довольно четко объяснено в документации gluPerspective
.Вы просто строите соответствующую матрицу преобразования 4x4 и используете glMultMatrix
, чтобы умножить ее на текущее преобразование:
void myGluPerspective(double fovy, double aspect, double zNear, double zFar)
{
double f = 1.0 / tan(fovy * M_PI / 360); // convert degrees to radians and divide by 2
double xform[16] =
{
f / aspect, 0, 0, 0,
0, f, 0, 0,
0, 0, (zFar + zNear)/(zNear - zFar), -1,
0, 0, 2*zFar*zNear/(zNear - zFar), 0
};
glMultMatrixd(xform);
}
Обратите внимание, что OpenGL хранит матрицы в порядке основной столбец , поэтомупорядок элементов массива выше транспонирован из того, что написано в документации gluPerspective
.