区分glFrustum和gluPerspective
来源:互联网 发布:中国网络作家排名 编辑:程序博客网 时间:2024/05/22 14:33
区分glFrustum和gluPerspective
(1)
先说一下glFrustum,当然这两个都是创建视图,都可以达到同样的效果。
函数原型:
void glFrustum(GLdouble left,GLdouble Right,GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);
先上图,虽然画的很糟糕(图上说明与函数参数相对应,45度是将要得出的广角先不考虑):
(灰色区域和DE后区域为不可见区,蓝色区域为可见区)
如果希望得到45度的广角,又希望所画的最小范围为(-2,-2)到(2,2)即near面的范围(即BC长为4),继而可以得到near值的大小为(2/tan(22.5))
,约为4.838,即AA‘为4.838
举个例子(画一个满屏的三角形):
[html]view plaincopyprint?- void Reshape(int width, int height)//重绘窗口
- {
- // 创建透视效果视图
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum(-2, 2, -2, 2, 4.828, 100);
- glViewport(0, 0, width, height);
- glMatrixMode(GL_MODELVIEW);
- }
- void Display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glTranslatef(0.0f, 0.0f, -4.828);//将球移入near内
- glBegin(GL_TRIANGLES);//画一个低边为4的三角形,与最小平面范围等大
- glVertex3d(-2, -2, 0);
- glVertex3d(2, -2, 0);
- glVertex3d(0, 2, 0);
- glEnd();
- glutSwapBuffers();
- }
运行结果:()
当我们对函数的参数设置不恰当时,就会发生一些一想不到的效果:
比如将参数设为: glFrustum(-10, 10, -10, 10, 0.1, 100);//相当这个广角很大,相当把眼睛睁开接近180度(有谁能做到吗),结果是什么都没有,但是用glPerspective设
为接近180度,会发现图形显得很小很小,因为你设置的是看见整个视野......
(2)
gluPerspective
函数原型:
void gluPerspective(GLdouble fovy,GLdouble aspect,GLdouble zNear, GLdouble zFar);
同样达到glFrustum的效果,此时fovy对应上图的45度,aspect为宽高比(即top边与right边的长度比),zNear和zFar概念和glFrustum相同
例子(得到和上一个例子一样的效果)
- void Reshape(int width, int height)
- {
- // 创建透视效果视图
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- //glFrustum(-2, 2, -2, 2, 4.828, 100);
- gluPerspective(45.0f,1,4.828f,100.0f);//广角为45度,
- glViewport(0, 0, width, height);
- glMatrixMode(GL_MODELVIEW);
- }
- void Display(void)
- {
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- glTranslatef(0.0f, 0.0f, -4.828f);
- glBegin(GL_TRIANGLES);
- glVertex3d(-2, -2, 0);
- glVertex3d(2, -2, 0);
- glVertex3d(0, 2, 0);
- glEnd();
- glutSwapBuffers();
- }
运行结果:(和glFrustum效果一样)
总之,习惯用那个就用哪个,只不过个人觉得glPerspective更直观一些更方便不容易睁得过头了呵,但是要包含glu.h哦......以上纯属个人见解笔记呵!!
- 区分glFrustum和gluPerspective
- 区分glFrustum和gluPerspective
- glFrustum()和gluPerspective()详解
- gluperspective和glFrustum函数的比较
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法.
- OpenGL中glFrustum()和gluPerspective()的相互转换
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法
- OpenGL中glFrustum()和gluPerspective()的相互转换
- OpenGL中gluPerspective函数和glFrustum函数的关系
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法.
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法.
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法.
- 透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法.
- glFrustum(),glOrtho(),gluPerspective()的实例
- OpenGL 入门纪录--2 .透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法
- OpenGL 入门纪录--透视函数glFrustum(), gluPerspective()函数用法和glOrtho()函数用法
- glOrtho,glFrustum,gluPerspective的理解,很清楚
- 《高效学习OpenGL》之 投影变换 glFrustum(),gluPerspective(),glOrtho(),gluOrtho2D()
- CodeForces 348A Mafia (思维)
- OCP-1Z0-052-V8.02-27题
- BFS POJ3669
- xcode 环境变量 Build Settings参数 workspace 联编设置
- 初识HTTP协议--请求与响应报文
- 区分glFrustum和gluPerspective
- POJ 2318 2398 计算几何
- 引起进程调度的原因
- C++ 值传递、指针传递、引用传递详解
- 深入理解计算机系统chapter7 学习笔记
- MyEclipse搭建SSH框架 Struts2.1+Spring3.0+hibernate3.3
- poj2068 Nim
- shell中的特殊字符
- B是不是A的子结构