C++ 更换gluPerspective(使用glFrustrum)

C++ 更换gluPerspective(使用glFrustrum),c++,opengl,C++,Opengl,如何将gluPerspective函数转换为glFrustum?我曾尝试使用这个等式,但没有任何运气,因为它没有生成与透视相同的图像 顶部=棕褐色(视野*3.14159/360.0)*近 底部=-顶部 左=纵横比*底部 右=方向*顶部 我似乎无法正确转换视野。例如,如果我的FOV为45,那么在平截头体调用中的“top”参数是什么?我们开始吧-您可以使用以下方法替换透视图: void perspectiveGL( GLdouble fovY, GLdouble aspect, GLdouble z

如何将gluPerspective函数转换为glFrustum?我曾尝试使用这个等式,但没有任何运气,因为它没有生成与透视相同的图像

顶部=棕褐色(视野*3.14159/360.0)*近 底部=-顶部

左=纵横比*底部 右=方向*顶部


我似乎无法正确转换视野。例如,如果我的FOV为45,那么在平截头体调用中的“top”参数是什么?

我们开始吧-您可以使用以下方法替换
透视图

void perspectiveGL( GLdouble fovY, GLdouble aspect, GLdouble zNear, GLdouble zFar )
{
    const GLdouble pi = 3.1415926535897932384626433832795;
    GLdouble fW, fH;

    //fH = tan( (fovY / 2) / 180 * pi ) * zNear;
    fH = tan( fovY / 360 * pi ) * zNear;
    fW = fH * aspect;

    glFrustum( -fW, fW, -fH, fH, zNear, zFar );
}

您可以在页面上找到有关该代码的更多解释。

如果您希望
fov*3.14159/360.0
从度转换为弧度,则它将不起作用。要将角度转换为弧度,请使用:
fov*3.14159/180.0
。谢谢你,Ryan,我使用的是180而不是360。这看起来好多了,但图片似乎离原来的位置更远。参见tiguero回答中的链接,它解释了为什么在这种情况下180可以减少到360。@约翰:在弧度到弧度的转换上,你需要一半大小的ur剪裁平面