2022年透视投影矩阵推导 .pdf
《2022年透视投影矩阵推导 .pdf》由会员分享,可在线阅读,更多相关《2022年透视投影矩阵推导 .pdf(11页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、在上一篇文章中我们讨论了透视投影变换的原理,分析了OpenGL 所使用的透视投影矩阵的生成方法。 正如我们所说, 不同的图形 API 因为左右手坐标系、 行向量列向量矩阵以及变换范围等等的不同导致了矩阵的差异,可以有几十个不同的透视投影矩阵,但它们的原理大同小异。这次我们准备讨论一下Direct3D (以下简称 D3D )以及 J2ME平台上的 JSR184 (M3G )(以下简称 M3G )的透视投影矩阵,主要出于以下几个目的:(1)我们在写图形引擎的时候需要采用不同的图形API 实现,当前主要是 OpenGL 和 D3D 。虽然二者的推导极为相似,但D3D的自身特点导致了一些地方仍然需要澄
2、清。(2) DirectX SDK的手册中有关于透视投影矩阵的一些说明,但并不详细,甚至有一些错误, 从而使初学者理解起来变得困难,而这正是本文写作的目的。(3) M3G是 J2ME平台上的 3D开发包,采用了OpenGL 作为底层标准进行封装。它的透视投影矩阵使用OpenGL 的环境但又进行了简化,值得一提。本文努力让读者清楚地了解D3D与 M3G 透视投影矩阵的原理, 从而能够知道它与OpenGL 的一些差别,为构建跨API 的图形引擎打好基础。需要指出的一点是为了完全理解本文的内容, 请读者先理解上一篇文章 深入探索透视投影变换 的内容,因为 OpenGL 和它们的透视投影矩阵的原理非常
3、相似,因此这里不会像上一篇文章从基础知识讲起,而是对比它们的差异来推导变换矩阵。我们开始!OpenGL 与 D3D的基本差异前面提到,不同 API 的基本差异导致了最终变换矩阵的不同,而导致OpenGL 和D3D的透视投影矩阵不同的原因有以下几个:(1) OpenGL默认使用右手坐标系,而D3D 默认使用左手坐标系。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - (2) OpenGL使用列向量矩阵乘法而D3D使用行向量矩阵乘法
4、。(3) OpenGL的 CVV 的 Z范围是 -1, 1 ,D3D的 CVV 的 Z范围是 0, 1 。以上这些差异导致了最终OpenGL 和 D3D的透视投影矩阵的不同。D3D的透视投影矩阵推导我们先来看最最基本的透视关系图(上一篇文章开始的时候使用的图):这里我们考察的是xz 平面上的关系,yz 平面上的关系同理。 这里 o 是相机位置。np 是近裁剪平面,也是投影平面,N是它到相机的距离。 fp 是远裁剪平面, F是它到相机的位置。 p 是需要投影的点, p是投影之后的点。根据相似三角形定理,我们有则有名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
5、 - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - - - - - - - - - 注意到 OpenGL 使用右手坐标系,因此应该使用 -N (请参考上一篇文章的这一步) ,而 D3D使用左手坐标系,因此使用N,这是二者的不同点之一。这样,我们得到投影之后的点第三个信息点是变换之后的z 在投影平面上的位置,也就是N ,它已经没用了,我们把 p写成从而用第三个没用信息点它来存储z(如果读者对这一点不太了解,请参考上一篇文章) 。 接下来我们求出 a 和 b, 从而在 z 方向上构建 CVV 。 请注意这里是 OpenGL和 D3D的另一个不同点,
6、 OpenGL 的 CVV 的 z 范围是-1, 1,而 D3D的 CVV 的 z范围是 0, 1 。也就是说, D3D 中在近裁剪平面上的点投影之后的点会处于CVV的 z=0 平面上,而在远裁剪平面上的点投影之后的点会在CVV 的 z=1平面上。这样我们的计算方程就是从而我们得到了透视投影矩阵的第一个版本即名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 11 页 - - - - - - - - - 这个时候第三个分量变换到CVV情形了, CVV 的 z 范围是 0,1
7、。接下来根据上一篇文章所讲到的,我们要把前两个分量变成CVV 情形, CVV 的 x 和 y 范围是 -1, 1 ,如下图所示:使用线性插值,我们有:这里 left和 right是投影平面的左右范围, top 和 bottom 是投影平面的上下范围。xcvv 和 ycvv 是我们需要算出的在CVV 情形中的 x 和 y,也就是我们要计算出的结果。但在算出它们之前,我们先把上面的式子写成:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年透视投影矩阵推导 2022 透视 投影 矩阵 推导
限制150内