三维空间变换其实是图形学的基本知识,和DX倒没有什么特定关系。但MS关于这块儿的文档教程解释得很详尽。看完之后我觉得我对于坐标变换的理解又深入了一步。此处我截取自己觉得精要的地方来说明。
资料参考:
1、原文: http://www.codeguru.com/cpp/misc/misc/math/article.php/c10123__1/Deriving-Projection-Matrices.htm
译文:http://blog.youkuaiyun.com/zhanghua1816/article/details/23121735
2、http://dev.gameres.com/Program/Visual/3D/shenruTS.htm
3、http://blog.youkuaiyun.com/code_xbug/article/details/46299603
4、MS官方document-Tutorial04:3D Spaces
坐标空间概述
坐标空间,就是用不同的坐标系所度量的空间。不同的坐标系是什么意思呢?原点位置、坐标轴方向、坐标轴单位值,这三者决定了一个坐标系,任一不同,则坐标系不同。(这里决定坐标系的要素是我自己总结的,如有疏漏敬请指出)
为什么图形学里要用到坐标空间变换呢?因为我们输入的模型顶点,通常都是定义在一个local space里的,也就是“局部坐标系”。这个坐标空间的特点就是,以模型上或者模型外一点为原点(通常在模型底心或中心),以正交的XYZ作为坐标轴(轴的方向定义通常与输入模型的面部朝向相关)。每一个输入的模型都有各自的Local space,当我们想把它在我们定义的世界空间里移动旋转缩放时,就面临着问题,因为我们执行的操作需要在一个统一的世界坐标系下执行。这时就需要用到坐标空间变换了——将一个局部坐标系下定义的顶点坐标,转换为世界坐标系下的顶点坐标。
图形学中共涉及以下几种坐标空间:
local space局部空间
world space世界空间
view space观察空间
projection space投影空间
screen space屏幕空间
将输入的模型最终显示到屏幕上,经过的空间变换也基本如上顺序所示。
那么,如何进行变换呢?
变换原理
对顶点进行空间变换,其实就是用不同坐标空间下的坐标值表示同一个点。一个点在三维空间下由三维向量xyz表示,运用变换矩阵,可以将其坐标进行空间变换。那么变换矩阵又是什么呢?
变换矩阵既然能联系两种坐标空间,那么其组成元素必定和坐标轴相关。事实上,从坐标空间A变换到空间B,需要