zoukankan      html  css  js  c++  java
  • OpenGL中glFrustum()和gluPerspective()的相互转换

    OpenGL中在窗口的大小发生变化的时候会触发resize()函数,这里会传入一个新的宽和高,在resize()函数中我们会设置投影矩阵,在可以使用OpenGL基础函数glFrustum()函数和glu函数gluPerspective()函数。网上介绍两个函数联系比较少,所以自己研究呗。

    OpenGL函数glFrustum是建立一个平截头体的函数,在建立投影矩阵的时候使用。glu的gluPerspective()函数是对OpenGL基础函数glFrustum()的封装。两者提供的参数也不一致,那么gluPerspective()函数又是如何对glFrustum()函数进行封装呢?

    下面是两个函数的声明:

    glFrustum(GLdouble left,GLdouble right,GLdouble bottom,GLdouble top,GLdouble zNear,GLdouble zFar);
    gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear,GLdouble zFar);

    要理解两者间的联系,还得研究它们的原理。下面是两个函数的原理图:

    OpenGL中glFrustum()和gluPerspective()的相互转换

    理解了这些关系之后就可以列出两者之间的转换关系了。

    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 );
    }

  • 相关阅读:
    文件操作
    字典的相关函数
    列表相关操作/列表的相关函数
    字符串相关操作/字符串相关函数
    局部变量 与 全局变量
    函数名的使用
    函数的返回值 return
    命名关键字
    收集参数
    默认形参 与 关键字实参的区别
  • 原文地址:https://www.cnblogs.com/zjzyh/p/4074583.html
Copyright © 2011-2022 走看看