openGL中投影矩阵的推导
来源:互联网 发布:java将时间转换成秒 编辑:程序博客网 时间:2024/06/10 16:03
参考:http://www.songho.ca/opengl/gl_projectionmatrix.html
http://www.linuxidc.com/Linux/2015-08/122229.htm
透视投影
下面为透视投影的视锥体
其中,远裁剪平面距离原点为f, 近裁剪屏幕距离原点n。
设P(x0, y0,z0)投影到近平面上的Pn(x1, y1, z1)。
如图所示,我们分别求x1,y1,z1。沿着x轴方向看横切面如图所示:
投影后,x坐标为x1(在近裁剪平面投影),由相似三角形的性质,有:
n为负,是由于视锥体和投影矩阵坐标系不同,一个是view空间,一个是投影空间。z轴方向不同
这样其实实现了透视投影近大远小的效果,因为z0越大,则x1,y1越小。为了将这两个值转换到[-1,1]区间内,设l和r分别为近裁剪平面左右边框的x左边,即l=-w/2,r=w/2。为了使任何投影到近裁剪空间的点都在区间内,转换后,[l’, r’]属于[0,1],其中l’,r’分别为l和r转换后的值。因为是线性变化,可另x’=kx+b;
同理,y的表示:
x和y投影后的左边都有共同因子[-1/z0],正好对应变换后w=-z0。
接下来,我们看z要满足什么要求。为了简化讨论,根据以上结论,我们假设透视变换有下述形式:
则
于是
最后的变换矩阵为:
如果视锥体是对称的,r=-l,t=-b,则
z存在关系:
另外我们再看一个z2和z0关系,你会发现上述函数是有理函数,而z2和z0之间并不是线性关系。在近近裁剪平面的地方精度较高,反之则较低。如果[-n,-f]范围变大,则会引起深度精度问题(z-fighting)。所以n和f之间的距离应该尽量小,以减小深度缓存的精度问题。
- OpenGL中投影矩阵的推导
- openGL中投影矩阵的推导
- OpenGL投影矩阵的推导
- 投影矩阵的推导(OpenGl)
- OpenGL 投影矩阵的推导
- OpenGL 投影矩阵的推导
- OpenGL: 3D中投影矩阵公式的推导
- OpenGL投影矩阵推导
- OpenGL学习脚印: 投影矩阵的推导
- OpenGL投影矩阵的推导过程
- 投影矩阵的推导
- OpenGL Projection Matrix(投影矩阵推导)
- opengl es 透视投影矩阵推导
- [译] - 投影矩阵的推导
- opoengl 投影矩阵的推导
- 投影矩阵的推导(Direct3D)
- 3D中投影矩阵公式的推导
- OpenGL投影矩阵的构造
- 使用 SysRq 查看系统信息
- JAVA面向对象基础学习及笔记
- bzoj1612 [Usaco2008 Jan]Cow Contest奶牛的比赛(Floyd)
- MySQL中join的update、delete语法
- [MSSQL]事务日志还原
- openGL中投影矩阵的推导
- 牛客网错题集锦6
- 全卷积网络实现语义分割综述
- 酷炫 UI 组件汇总
- PHP定时任务
- [编程题] 简单错误记录
- 关于下拉菜单的问题
- myeclipse中js文件保存不了
- 代理模式