glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble zNear,GLdouble zFar); gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);
要理解两者间的联系,还得研究它们的原理。下面是两个函数的原理图:
理解了这些关系之后就可以列出两者之间的转换关系了。void MyPerspective( GLdouble fov, GLdouble aspectRatio, GLdouble zNear, GLdouble zFar ) { // 使用glu库函数,需要添加glu.h头文件 //gluPerspective( fov, aspectRatio, zNear, zFar ); // 使用OpenGL函数,但是需要添加math.h头文件 GLdouble rFov = fov * 3.14159265 / 180.0; glFrustum( -zNear * tan( rFov / 2.0 ) * aspectRatio, zNear * tan( rFov / 2.0 ) * aspectRatio, -zNear * tan( rFov / 2.0 ), zNear * tan( rFov / 2.0 ), zNear, zFar ); }如果出于某种原因无法使用glu库,那么就使用替代方法和glFrustum()函数吧。