[翻译]投影变换 Projection Transform (Direct3D 9)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[翻译]投影变换 Projection Transform (Direct3D 9)相关的知识,希望对你有一定的参考价值。
你可以认为投影变换就是控制摄像机内部的一种方式。他可以类推为为摄像机选择一个漏字板。它是三种变换中最难懂的。本文只讨论以下的一些内容。
典型的投影变换就是缩放和透视投影。投影就变换把视椎转化为一个立方体。近大远小。这就是把透视应用于场景。
在视椎体中,摄像机与变换空间原点的距离被定义为D,所以投景矩阵看起来像这样:
对应用程序而言,使用视角的角度定义x和y的比例系数可能不如使用视区在水平和垂直方向上的大小(在摄像机空间中)方便。可以用数学推导,得出下面两个使用视区大小计算w和h的公式,它们与前面的公式是等价的。
在这两个公式中,Zn表示近裁剪平面的位置,Vw和Vh变量表示视区在摄像机空间的宽和高。
对于C++应用程序而言,这两个大小直接对应于D3DVIEWPORT9结构的Width和Height成员。(译注:虽然直接对应,但是不等价的,因为Vw和Vh位于摄像机空间,而Width和Height位于屏幕空间)
无论决定使用什么公式,非常重要的一点是要尽可能将Zn设得大,因为接近摄像机的z值变化不大。这使得用16位z缓存的深度比较变得有点复杂。
同世界变换和观察变换一样,应用程序调用IDirect3DDevice9::SetTransform方法设置投影矩阵。
以上是关于[翻译]投影变换 Projection Transform (Direct3D 9)的主要内容,如果未能解决你的问题,请参考以下文章
翻译我的OpenGL学习进阶之旅世界(World)视图(View)和投影变换矩阵(Projection Transformation Matrices)
OpenGL投影矩阵(Projection Matrix)构造方法