GLUP的原始OpenGL等价物?

时间:2010-06-17 02:37:59

标签: c++ c opengl

我怎么能做没有Glu的GluPerspective?感谢

ex:gluPerspective(45.0,(float)w /(float)h,1.0,200.0);

2 个答案:

答案 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文档中的内容进行转换。