我怎么能做没有Glu的GluPerspective?感谢
ex:gluPerspective(45.0,(float)w /(float)h,1.0,200.0);
答案 0 :(得分:7)
void gluPerspective( GLdouble fovy, GLdouble aspect, GLdouble zNear, GLdouble zFar )
{
GLdouble xmin, xmax, ymin, ymax;
ymax = zNear * tan( fovy * M_PI / 360.0 );
ymin = -ymax;
xmin = ymin * aspect;
xmax = ymax * aspect;
glFrustum( xmin, xmax, ymin, ymax, zNear, zFar );
}
答案 1 :(得分:3)
在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以 column-major 顺序存储矩阵,因此上面数组元素的顺序是根据gluPerspective
文档中的内容进行转换。