OpenGL中glFrustum()和gluPerspective()的相互转换
来源:互联网 发布:脱发不光头知乎 编辑:程序博客网 时间:2024/05/29 12:53
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);
要理解两者间的联系,还得研究它们的原理。下面是两个函数的原理图:
理解了这些关系之后就可以列出两者之间的转换关系了。
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 );
}
- OpenGL中glFrustum()和gluPerspective()的相互转换
- OpenGL中glFrustum()和gluPerspective()的相互转换
- OpenGL中gluPerspective函数和glFrustum函数的关系
- gluperspective和glFrustum函数的比较
- 区分glFrustum和gluPerspective
- 区分glFrustum和gluPerspective
- glFrustum()和gluPerspective()详解
- OpenGL中投影函数glOrtho()、glFrustum()以及gluPerspective()以及函数的用法
- opengl中gluPerspective和gluLookAt的关系
- glFrustum(),glOrtho(),gluPerspective()的实例
- OpenGL 入门纪录--2 .透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法
- OpenGL 入门纪录--透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法
- glOrtho,glFrustum,gluPerspective的理解,很清楚
- 《高效学习OpenGL》之 投影变换 glFrustum(),gluPerspective(),glOrtho(),gluOrtho2D()
- OpenGL: gluPerspective和gluLookAt的关系
- OpenGL: gluPerspective和gluLookAt的关系
- OpenGL的gluLookAt和gluPerspective详解
- 【OpenGL】gluLookAt()和gluPerspective()的区别
- Tomat集群 + Tomcat集群session共享 + Nginx负载 + Nginx静态资源代理
- HTML4 和 HTML5 的10个关键区别
- 星号图
- go语言操作mysql范例(增删查改)
- 第九周项目二 分数的累加
- OpenGL中glFrustum()和gluPerspective()的相互转换
- SecureCRT缓存大小设置,linux终端缓存大小解决方案
- 第九周项目3--输出星号图
- 黑马程序员—java基础学习--多线程
- UE4在VS2013中各个编译配置代表意义
- Win7 默认80端口被占用
- Linux内核时间管理和定时器
- JAVA HttpURLConnection超时处理
- Xcode5修改工程名称