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代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
随机推荐
- bzoj1770: [Usaco2009 Nov]lights 燈(折半搜索)
1770: [Usaco2009 Nov]lights 燈 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1153 Solved: 564[Submi ...
- Android之条形码、二维码扫描框架(非原创)
文章大纲 一.条形码.二维码扫描框架介绍二.条形码.二维码的区别和组成结构介绍三.条形码.二维码扫描框架应用场景四.BGAQRCode-Android框架实战五.项目源码下载六.参考文章 一.条形码. ...
- [Qt Creator 快速入门] 第1章 Qt Creator简介
Qt Creator 是一个跨平台的.完整的 Qt 集成开发环境,其中包括了高级C++代码编辑器.项目和生成管理工具.集成的上下文相关的帮助系统.图形化调试器.代码管理和浏览工具等.这一章先对 Qt ...
- 398 Random Pick Index 随机数索引
给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引. 您可以假设给定的数字一定存在于数组中.注意:数组大小可能非常大. 使用太多额外空间的解决方案将不会通过测试.示例:int[] num ...
- poj2289 Jamie's Contact Groups
思路: 二分+最大流.实现: #include <stdio.h> #include <stdlib.h> #include <limits.h> #include ...
- React 篇 Search Bar and content Table
我们要构建一个模块,其中包含一个内容显示的表格,然后上面有一个提供Search的栏位,并对Search中输入栏进行监听,当有改变的时候,触发Search然后对内容表中的内容进行过滤. Demo Lin ...
- C语言特殊知识点解析
1 数组 1.1 概念 数组是指某种数据类型,在内存上按照顺序存储.中括号([ ])是数组的标识,中括号内的数值标识该种数据类型变量的个数,中括号也有取值的作用. 1.2 数组使用 int a[10] ...
- Mysql慢SQL与索引案例
写在最前 关于慢sql的开启与配置查看之前我整理的文章: http://www.cnblogs.com/hanxiaobei/p/5515624.html 前提准备: tomcat7.x mysql- ...
- sql server nullif的使用技巧,除数为零的处理技巧
在sql server中做除法处理的时候,我们经常需要处理除数为零的情况,因为如果遇到这种情况的时候,sqlserver会抛出遇到以零作除数错误的异常,我们总不希望把这个异常显示给用户吧. 做个会报这 ...
- Android Measure 体系简单总结
Android对View的测量是半协商半强制半模糊半具体的. 测量过程中的两套尺寸体系: [半强制] ParentView**约束ChildView: **MeasureSpec(通过measure ...