鸿 网 互 联 www.68idc.cn

OpenGL中投影矩阵的推导

来源:互联网 作者:佚名 时间:2015-09-18 22:18
本文主要是对OpenGL红宝书(第八版)第五章中给出的透视投影矩阵和正交投影矩阵做一个简单推导。投影矩阵的目的是:原始点P(x,y,

  本文主要是对OpenGL红宝书(第八版)第五章中给出的透视投影矩阵和正交投影矩阵做一个简单推导。投影矩阵的目的是:原始点P(x,y,z)对应后投影点P'(x',y',z')满足x',y',z'∈[-1,1]。

OpenGL编程指南(原书第八版2013年最新)英文PDF 下载见

OpenGL编程指南(原书第7版)中文扫描版PDF 下载见  

  一、透视投影                                                                                                                   

  下图为透视投影的视锥体:

OpenGL中投影矩阵的推导

注:上图中忘了标注了,远裁剪平面距离原点距离为f,近裁剪平面距离原点距离为n。

设P(x0, y0, z0),我们分别求各个坐标在投影后的值。将P点投影到近平面上,首先看x方向上的投影,沿着过P点,且平行于xoz平面切一刀,有如下图:

OpenGL中投影矩阵的推导

假设投影后的x坐标为:x_n(在近裁剪平面的投影),由相似三角形的性质,有

OpenGL中投影矩阵的推导

,可以得到:

OpenGL中投影矩阵的推导

同理,有

OpenGL中投影矩阵的推导

这样其实实现了透视投影,,近大远小的效果,因为z0越大,则x1,y1就越小。为了将这两个值转换到[-1,1]区间内,设l和r分别为近裁剪平面左、右边框的x坐标,即l=-w/2,r=w/2(如图所示,w为上下边框的长度),为了使任何投影到近裁剪平面的点都在区间内,转换后,[l',r']∈[0,1],其中l',r'分别为l和r转换后的值。因为是线性转换,可领x'=kx+b,则下式成立:

OpenGL中投影矩阵的推导

求得,

OpenGL中投影矩阵的推导

再根据之前的结果,可以得到归一化后的x坐标为:

OpenGL中投影矩阵的推导

同理,设t和p分别为近裁剪平面上下边框的y坐标,则:

OpenGL中投影矩阵的推导

投影后的坐标都有一个共同因子——[-1/z0],正好对应变换后w=-z0。

接下来,我们看z要满足什么要求。为简化讨论,根据以上结论,我们假设透视变换有下述形式:

OpenGL中投影矩阵的推导

于是:

OpenGL中投影矩阵的推导

最后的变换矩阵如下:

OpenGL中投影矩阵的推导

OpenGL超级宝典 第4版 中文版PDF+英文版+源代码 见 

OpenGL 渲染篇

Ubuntu 13.04 安装 OpenGL

OpenGL三维球体数据生成与绘制【附源码】

Ubuntu下OpenGL编程基础解析

如何在Ubuntu使用eclipse for c++配置OpenGL  

更多《OpenGL超级宝典学习笔记》相关知识 见 ?where=nkey&keyword=34581

本文永久更新链接地址

网友评论
<