深入探索透视投影矩阵

深入探索透视投影矩阵

ID:6633558

大小:495.50 KB

页数:25页

时间:2018-01-20

深入探索透视投影矩阵_第1页
深入探索透视投影矩阵_第2页
深入探索透视投影矩阵_第3页
深入探索透视投影矩阵_第4页
深入探索透视投影矩阵_第5页
资源描述:

《深入探索透视投影矩阵》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、-Twinsen 编写 - 本人水平有限,疏忽错误在所难免,还请各位数学高手、编程高手不吝赐教 -email: popyy@netease.com  透视投影是 3D 固定流水线的重要组成部分,是将相机空间中的点从视锥体 (frustum) 变换到规则观察体 (CanonicalViewVolume) 中,待裁剪完毕后进行透视除法的行为。在算法中它是通过透视矩阵乘法和透视除法两步完成的。 透视投影变换是令很多刚刚进入 3D 图形领域的开发人员感到迷惑乃至神秘的一个图形技术。其中的理解困难在于步骤繁琐,对一些基础知识过分依赖,一旦

2、对它们中的任何地方感到陌生,立刻导致理解停止不前。 没错,主流的 3DAPIs 如 OpenGL 、 D3D 的确把具体的透视投影细节封装起来,比如gluPerspective(…) 就可以根据输入生成一个透视投影矩阵。而且在大多数情况下不需要了解具体的内幕算法也可以完成任务。但是你不觉得,如果想要成为一个职业的图形程序员或游戏开发者,就应该真正降伏透视投影这个家伙么?我们先从必需的基础知识着手,一步一步深入下去(这些知识在很多地方可以单独找到,但我从来没有在同一个地方全部找到,但是你现在找到了 J )。 我们首先介绍两个必须掌

3、握的知识。有了它们,我们才不至于在理解透视投影变换的过程中迷失方向(这里会使用到向量几何、矩阵的部分知识,如果你对此不是很熟悉,可以参考 《向量几何在游戏编程中的使用》 系列文章)。 齐次坐标表示 透视投影变换是在齐次坐标下进行的,而齐次坐标本身就是一个令人迷惑的概念,这里我们先把它理解清楚。 根据 《向量几何在游戏编程中的使用 6 》 中关于基的概念。对于一个向量 v 以及基 oabc , 可以找到一组坐标 (v1,v2,v3) ,使得 v =v1 a +v2 b+ v3 c ( 1 ) 而对于一个点 p ,则可以找到一组坐标

4、( p1,p2,p3 ),使得 p – o =p1 a+ p2 b +p3 c ( 2 ) 从上面对向量 和点 的表达,我们可以看出为了在坐标系中表示一个点 (如 p ),我们把点的位置看作是对这个基的原点 o 所进行的一个位移,即一个向量—— p–o (有的书中把这样的向量叫做位置向量 ——起始于坐标原点的特殊向量),我们在表达这个向量的同时用等价的方式表达出了点 p : p = o +p1 a+ p2 b +p3 c(3)  (1)(3) 是坐标系下表达一个向量 和点 的不同表达方式。这里可以看出,虽然都是用代数分量的形式表

5、达向量和点,但表达一个点比一个向量需要额外的信息。如果我写出一个代数分量表达 (1,4,7) ,谁知道它是个向量还是个点! 我们现在把( 1 )( 3 )写成矩阵的形式:这里 (a,b,c,o) 是坐标基矩阵,右边的列向量分别是向量 v 和点 p 在基下的坐标。这样,向量和点在同一个基下就有了不同的表达: 3D 向量 的第 4 个代数分量是 0 ,而 3D 点 的第 4 个代数分量是 1 。像这种这种用 4 个代数分量表示 3D 几何概念的方式是一种齐次坐标表示。 “齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分

6、向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S.Hill,JR 这样,上面的 (1,4,7) 如果写成( 1,4,7,0 ),它就是个向量;如果是 (1,4,7,1) ,它就是个点。下面是如何在普通坐标 (OrdinaryCoordinate) 和齐次坐标 (HomogeneousCoordinate) 之间进行转换: 从普通坐标转换成齐次坐标时,如果 (x,y,z) 是个点,则变为 (x,y,z,1);如果 (x,y,z) 是个向量,则变为 (x,y,z,0) 从齐次坐标转换成普通坐标时,如果是 (x,y,z

7、,1) ,则知道它是个点,变成 (x,y,z);如果是 (x,y,z,0) ,则知道它是个向量,仍然变成 (x,y,z) 以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知,对于平移 T 、旋转 R 、缩放 S 这 3 个最常见的仿射变换,平移变换只对于点才有意义,因为普通向量没有位置概念,只有大小和方向,这可以通过下面的式子清楚地看出:   而旋转和缩放对于向量和点都有意义,你可以用类似上面齐次表示来检测。从中可以看出,齐次坐标用于仿射变换非常方便。 此外,对于一个普通坐标的点 P=(Px,Py,Pz) ,有对应的一族齐

8、次坐标 (wPx,wPy,wPz,w) ,其中 w 不等于零。比如, P(1,4,7) 的齐次坐标有 (1,4,7,1) 、( 2,8,14,2 )、( -0.1,-0.4,-0.7,-0.1 )等等。因此,如果把一个点从普通坐标变成齐次坐标,给 x,y,z 乘

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

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

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