透视投影矩阵推导

透视投影矩阵推导

ID:14286293

大小:338.00 KB

页数:11页

时间:2018-07-27

透视投影矩阵推导_第1页
透视投影矩阵推导_第2页
透视投影矩阵推导_第3页
透视投影矩阵推导_第4页
透视投影矩阵推导_第5页
资源描述:

《透视投影矩阵推导》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL所使用的透视投影矩阵的生成方法。正如我们所说,不同的图形API因为左右手坐标系、行向量列向量矩阵以及变换范围等等的不同导致了矩阵的差异,可以有几十个不同的透视投影矩阵,但它们的原理大同小异。这次我们准备讨论一下Direct3D(以下简称D3D)以及J2ME平台上的JSR184(M3G)(以下简称M3G)的透视投影矩阵,主要出于以下几个目的:(1)      我们在写图形引擎的时候需要采用不同的图形API实现,当前主要是OpenGL和D3D。虽然二者的推导极为相似,但D3D的自身特点导致了一些地方仍然

2、需要澄清。(2)      DirectXSDK的手册中有关于透视投影矩阵的一些说明,但并不详细,甚至有一些错误,从而使初学者理解起来变得困难,而这正是本文写作的目的。(3)      M3G是J2ME平台上的3D开发包,采用了OpenGL作为底层标准进行封装。它的透视投影矩阵使用OpenGL的环境但又进行了简化,值得一提。本文努力让读者清楚地了解D3D与M3G透视投影矩阵的原理,从而能够知道它与OpenGL的一些差别,为构建跨API的图形引擎打好基础。需要指出的一点是为了完全理解本文的内容,请读者先理解上一篇文章《深入探索透视投影变换》的内容,因为OpenG

3、L和它们的透视投影矩阵的原理非常相似,因此这里不会像上一篇文章从基础知识讲起,而是对比它们的差异来推导变换矩阵。我们开始!OpenGL与D3D的基本差异前面提到,不同API的基本差异导致了最终变换矩阵的不同,而导致OpenGL和D3D的透视投影矩阵不同的原因有以下几个:(1)      OpenGL默认使用右手坐标系,而D3D默认使用左手坐标系。(2)      OpenGL使用列向量矩阵乘法而D3D使用行向量矩阵乘法。(3)      OpenGL的CVV的Z范围是[-1,1],D3D的CVV的Z范围是[0,1]。   以上这些差异导致了最终OpenGL和D

4、3D的透视投影矩阵的不同。D3D的透视投影矩阵推导我们先来看最最基本的透视关系图(上一篇文章开始的时候使用的图):这里我们考察的是xz平面上的关系,yz平面上的关系同理。这里o是相机位置。np是近裁剪平面,也是投影平面,N是它到相机的距离。fp是远裁剪平面,F是它到相机的位置。p是需要投影的点,p’是投影之后的点。根据相似三角形定理,我们有则有注意到OpenGL使用右手坐标系,因此应该使用-N(请参考上一篇文章的这一步),而D3D使用左手坐标系,因此使用N,这是二者的不同点之一。这样,我们得到投影之后的点第三个信息点是变换之后的z在投影平面上的位置,也就是N,

5、它已经没用了,我们把p’写成从而用第三个没用信息点它来存储z(如果读者对这一点不太了解,请参考上一篇文章)。接下来我们求出a和b,从而在z方向上构建CVV。请注意这里是OpenGL和D3D的另一个不同点,OpenGL的CVV的z范围是[-1,1],而D3D的CVV的z范围是[0,1]。也就是说,D3D中在近裁剪平面上的点投影之后的点会处于CVV的z=0平面上,而在远裁剪平面上的点投影之后的点会在CVV的z=1平面上。这样我们的计算方程就是从而我们得到了透视投影矩阵的第一个版本即这个时候第三个分量变换到CVV情形了,CVV的z范围是[0,1]。接下来根据上一篇文

6、章所讲到的,我们要把前两个分量变成CVV情形,CVV的x和y范围是[-1,1],如下图所示:使用线性插值,我们有:这里left和right是投影平面的左右范围,top和bottom是投影平面的上下范围。xcvv和ycvv是我们需要算出的在CVV情形中的x和y,也就是我们要计算出的结果。但在算出它们之前,我们先把上面的式子写成:这里有一个需要注意的地方,如果投影平面在x方向上居中,则那么第一个式子就可以销掉等号两边的1/2,写成同理,如果投影平面在y方向上居中,则第二个式子可以写成则我们现在分两种情况讨论:(1)      投影平面的中心和x-y平面的中心重合(

7、在x和y方向上都居中)(2)      一般情况我们分别讨论:(1)特殊情况方程这组是特殊情况,方程比较简单,但也是使用频率最高的方式(这是D3DXMatrixPerspectiveLH、D3DXMatrixPerspectiveRH、D3DXMatrixPerspectiveFovLH、D3DXMatrixPerspectiveFovRH四个方法所使用的情况)。我们导出它:则我们反推出透视投影矩阵:其中而r-l和t-b可以分别看作是投影平面的宽w和高h。最后那个矩阵就是D3D的透视投影矩阵之一。另外呢,如果我们不知道right、left、top以及botto

8、m这几个参量,也可以根据视野(FOV–

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。