opengl 对投影变化函数的理解
投影变化分两种:
1 . 平行投影 2 . 透视投影
投影变化的设置一般放在reshape函数当中调用
每次要对投影变化进行操作的时候我们需要修改矩阵的变化模式,指定它为投影变化
glMatrixMode(GL_PROJECTION);
用完了记得改回去让 视景体内的物体进行正常的视图变化
glMatrixMode(GL_MODELVIEW);
这里主要讲一下最近对透视投影的理解,以免以后自己又不记得了
透视投影主要的两个函数
void glFrustum(GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble near , GLdouble far);
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble near , GLdouble far);
这两个函数之间干同一件事用不同的方式进行表达,能够相互转化

我们可以将照相机的位置看作视点所在,这个可以用glLookAt函数设置
靠近照相机的作为近侧面,右侧较远的作为远侧面
near:表示的是沿z轴方向的视点到近侧面的距离
far :表示的是沿z轴方向的视点到远侧面的距离
视线和远近侧面构成了一个棱台作为视景体,意思就是只有视景体内的物体才会被投影到屏幕上,多出的就会被裁减
对于一个物体投影到屏幕的方式是,可以看作将屏幕放在照相机和近侧面中间的某一位置上,视景体中的物体按照投影变化形成的角度,每一点
按这个角度投射到屏幕上,一条同等长度的线,所以当线的位置越在视景体的内侧,那么它投射到屏幕上的长度将越小
另外视点到视景体范围形成的角度越大,那么线透射到屏幕上越是倾斜偏移,那么屏幕上投射的线长度将会越小
这个角度也正是gluPerspective中的第一个参数fovy
void glFrustum(GLdouble left , GLdouble right , GLdouble bottom , GLdouble top , GLdouble near , GLdouble far);
(left , bottom , -near)和(right , top , -near)分别指定了近侧裁剪面左上角和右下角的坐标
这里在图上显示的是(l,t,n) 和 (r,b,n)
这里可以看出,视角(gluPerspective中的第一个参数fovy)的形成在这里只跟视点和近侧面的位置有关
这个视角是水平夹角

B点的坐标就可表示为((left+right)/2 , bottom , -near)
C点的坐标就可表示为((left+right)/2 , top , -near)
那么视角∠BAC就很容易算了
所以往往到远侧面距离的值是不影响结果的,但是如果这个值过小,物体不出现在视景体里,那就会意外了,所以总是将far值定义的较大,保证物体出现在视景体里
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble near , GLdouble far);
aspect在这里是投影截出的侧面的纵横比,其他参数都可以根据上一个函数理解
opengl 对投影变化函数的理解的更多相关文章
- opengl中对glOrtho()函数的理解
glOrtho是创建一个正交平行的视景体. 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况.比如,常用的工程中的制图等.需要比较精确的显示. 而作为它的对立情况, glFrustum则产生一个 ...
- OpenGL中常用的函数
OPengl的官方文档如下:https://www.opengl.org/sdk/docs/man4/ void glGetIntegerv( GLenum pname, GLint * ...
- glViewport()函数和glOrtho()函数的理解(转)
转:http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html 摘要:glOrtho相当指定图框的大小,由此会使得图框里的图形 ...
- OpenGL的glOrtho平行投影函数详解[转]
glortho函数可以将当前的可视空间设置为正投影空间.基参数的意义如图,如果绘制的图空间本身就是二维的,可以使gluOrtho2D.他的使用类似于glOrtho 原型是: void glOrtho( ...
- glViewport()函数和glOrtho()函数的理解(转)
http://www.cnblogs.com/yxnchinahlj/archive/2010/10/30/1865298.html 在OpenGL中有两个比较重要的投影变换函数,glViewport ...
- glViewport()函数和glOrtho()函数的理解
glViewport()函数和glOrtho()函数的理解 OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体. 一般 ...
- 回调函数透彻理解Java
http://blog.csdn.net/allen_zhao_2012/article/details/8056665 回调函数透彻理解Java 标签: classjavastringinterfa ...
- 对c语言中malloc和free函数的理解
最近在复习c语言的时候再次用到了malloc函数和free函数,此处着讲解一下自己对这两个函数的理解和认识. 一. malloc函数和free函数的基本概念和基本的用法 对于malloc函数: 1. ...
- js中的回调函数的理解和使用方法
js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
随机推荐
- bzoj 1578: [Usaco2009 Feb]Stock Market 股票市场【背包】
参考:https://blog.csdn.net/mars_ch/article/details/53011234 我背包真是好不熟练啊-- 第一天买了第三天卖相当于第一天买了第二天卖第二天再买第三天 ...
- 一些常见的iOS面试问题,一眼就能看出 初级和高级工程师的区别
前言 面试题中有一些一般性的问题,通常是会问到的.面试iOS应聘者时,切入点很重要,不同的切入点会导致不同的结果,没有找到合适的切入点也无法对应聘者有一个全面的了解. 所以下面的面试问题更多的是提供方 ...
- JavaScript编程艺术-第10章-10.1-动画
10.1—最简单的动画 ***代码亲测可用*** 动画:让元素位置随着时间而不断地发生变化 HTML: <!DOCTYPE HTML> <html> <head> ...
- 生成自签名ca 证书 使nginx 支持https
创建服务器私钥,命令会让你输入一个口令:$ openssl genrsa -des3 -out server.key 1024创建签名请求的证书(CSR):$ openssl req -new -ke ...
- U - Relatives(欧拉函数)
Description Given n, a positive integer, how many positive integers less than n are relatively prime ...
- O - Combinations (组合数学)
Description Computing the exact number of ways that N things can be taken M at a time can be a great ...
- 使用wkwebview后,页面返回不刷新的问题
onpageshow 事件在用户浏览网页时触发. onpageshow 事件类似于 onload 事件,onload 事件在页面第一次加载时触发, onpageshow 事件在每次加载页面时触发,即 ...
- Sql生成不重复的数字
-- ============================================= -- Author:TUZI -- Create date: 2016.4.18 -- Descrip ...
- FTP初始化文件.netrc使用技巧[转发]
FTP初始化文件.netrc使用技巧 FTP(文件传输)和E-mail(电子邮件).Telnet(远程登录)一样,是 Internet的三大主要功能之一.因为使用频繁,用户往往会遇到各种 各样的问题, ...
- 如何快速排查解决Android中的内存泄露问题
概述 内存泄露是Android开发中比较常见的问题,一旦发生会导致大量内存空间得不到释放,可用内存急剧减少,导致运行卡顿,部分功能不可用甚至引发应用crash.对于复杂度比较高.多人协同开发的项目来讲 ...