看了很多资料,总算是把一个流水线中的几何变化所涉及到的坐标系统和坐标含义搞清楚了。
一个流水线中包含六个坐标系统:物体(模型)坐标系统,世界坐标系统,摄像机坐标系统,裁剪坐标系统(齐次坐标体系统),规范立方体坐标系统(CVV),屏幕坐标系统。
对应每个坐标系统,有六种坐标:物体(模型)坐标系统坐标,世界坐标系统坐标,摄像机坐标系统坐标,裁剪坐标系统坐标(齐次坐标),规范立方体坐标(CVV),屏幕坐标系统坐标。
每种坐标系统之间的转化又对应四种矩阵:物体到世界坐标系统之间的矩阵,世界到摄像机之间的矩阵,摄像机到裁剪坐标系统的矩阵(透视矩阵),CVV坐标到屏幕坐标系统的矩阵。这里需要注意的一点时当坐标乘以透视矩阵后,进行裁剪,裁剪过后有个一透视除法。经过透视除法(齐次坐标转化成非齐次坐标)之后变成了CVV坐标。裁剪的作用之一就是避免透视除法出现除零错误。透视除法,又称为投影,和透视矩阵是两个概念。
CVV坐标中,所有坐标范围都是[-1,1]之间,其中将x,y的值映射到屏幕(CVV坐标到屏幕坐标系统的矩阵),就是相应的像素位置。z用来表示深度。
(1)物体到世界坐标系统之间的矩阵:《3D游戏开发 数学与物理基础》中介绍的各种旋转,平移等等矩阵。
(2)世界到摄像机之间的矩阵:http://blog.csdn.net/popy007/article/details/5120158
(3)摄像机到裁剪坐标系统矩阵:http://blog.csdn.net/popy007/article/details/1797121
(4)裁剪坐标到屏幕坐标系统的矩阵 :《3D游戏编程大师技巧》相关章节,其实前面的矩阵要是都看明白了,这个矩阵就自己推好了,非常简单。
关于(2)(3)的帖子,理论推导十分细致,向作者致敬!!!有点缺憾就是对于CVV及其裁剪介绍的不是十分完善,关于(2)(3)更系统的解释可以参考《计算机图形学(opengl版)》第三版,第七章,十分完备,这是整个流水线中最难的两个矩阵。
这片随笔中的所有术语参考的是《计算机图形学(opengl版)》。