D3DXMatrixShadow 产生一个矩阵,把几何体投影到平面上,神奇的是这个矩阵不论对平行光还是点光,都具有统一的形式(见左边D3DXMatrixShadow的文档链接)。
Introduction to 3D Game Programming with DirectX9.0 模板缓冲区那一章里提示感兴趣的读者参考Chapter 6, “Me and My (Fake) Shadow,” Jim Blinn’s Corner: A Trip Down the Graphics Pipeline。
《计算机图形学与几何造型导论》用很基本的向量和矩阵(线性代数)的知识,分别推导出了平行投影和透视投影各自的变换矩阵。因为后者我很早就读过了,非常熟悉;只把前者简单地看了看,有了一个思路(随着点光源距离平面越来越远,平面上任意两点接收到的光线趋于平行,若点光源位置无穷远,则就是平行光了),把这两个变换矩阵合二为一。
齐次坐标
一维
数轴L上一点的坐标 x = x/1 = kx/k ( k!=0 ) 即数轴上一点的坐标可以写成两个实数 X、k 的比值,记作 (X,k) k!=0,这就是一维空间点的齐次坐标(比例关系X:k)。
(x,1) 与 k!=0 k(x,1)=(kx,k) 都是数轴L上的同一个点,对应着二维空间中的一条过原点、斜率不为零的直线(除去原点)。
(X,k) k!=0 代表数轴L上的点 x=X/k,若X!=0,k->0 x-> infinity,即无穷远。记 (X,0) X!=0 代表无穷远,对应着二维空间中过原点、斜率为零的直线(除去原点)。
而剩下的 (0,0) 对应着 二维空间的 原点。
二维
黄色平面(z=1)上某点A的二维坐标 (x,y) = (x/1, y/1) = (kx/k, ky/k) k!=0,kx=X,ky=Y,写成齐次坐标的形式:(X, Y, k) <--> (X/k, Y/k, 1) = (x,y,1) k!=0,比例关系 (X: Y :k) 。
(x,y,1) 与 (kx,ky,k) k!=0 都表示黄色平面上的同一个点,对应着三维空间中一条