说明:本书中遵循的一些书写习惯为列向量,左乘,逆时针旋转为正方向(符合右手定则)。
变换分为线性变换,仿射变换和投影变换。这三种变换表达式不同,但都可以用形如Y=MX的式子表达,其中Y,X是齐次坐标,M是4阶齐次方阵。
一,线性变换
符合线性规则的变换就叫线性变换。已知变换Y=L(X),若L(cU+V)=cL(U)+L(V),则称变换Y=L(X)为线性变换。
线性变换的矩阵表达形式为Y=MX,显然,M(cU+V)=cMU+cV,符合线性规则。
常见的线性变换有旋转(绕原点),对映,缩放和切变。
1.旋转。
二维空间中旋转矩阵R==
其中,I=, S=
三维空间中绕z轴的旋转矩阵R==
绕y轴的旋转矩阵为R==
绕x轴的旋转矩阵为R==
对于任意轴的方向向量N,其坐标为则S=
旋转矩阵R=
其中
2..对映
由上图可知,, , c=
两式相减并代入c得,
所以,对于平面法向量N=
对映矩阵R=
(注:对角元素中的n1和n2也是平方!!!!!)
3.缩放
书中介绍了两种求缩放矩阵的思路,这里只写出比较直观易懂的方法。
思路如下,先将待变换的向量变换到D,U,R(D,U,R为缩放的三个方向)组成的坐标系下,然后对每一个坐标分别乘以相应的缩放系数即可。
假设对应于D,U,R三个方向的缩放系数分别为,则缩放矩阵为
S=
4.切变
由于切变很少用到,这里不做讲述,详见27到28页。
二,仿射变换。
仿射变换可用形如Y=MX+B的式子表示。
其中,M代表某个线性变换,B代表平移量。它表示先对向量进行线性变换,再进行平移变换。
常见的形式有两种,平移和绕非原点的点旋转。
三,投影变换。
分为正交投影,斜投影和透视投影。
其中,正交投影和斜投影属于仿射变换,透视投影既不是线性变换,也不是仿射变换。
它相当于先进行一次仿射变换,再除以一个与待投影向量本身有关的量(此除法称为prospective divide)。
1.点到线的正交投影
其中,X为待投影点,Y为投影点,D为直线的方向向量,P为直线上一点。
由上图可知,
上式代入下式,得
=MX+B,
其中,M=, B=
2.点到面的正交投影。
其中,X为待投影点,Y为投影点,P为平面内一点,N为平面的法向量。
由上图可知,
下式代入上式,得
=MX+B
其中,M=, B=
3.点到面的斜投影。
如上图,P为平面内一点,N为平面法向量,X为待投影点,Y为投影点,D为直线的方向向量。
由上图可得,
下式代入上式可得,
其中,
4.点到面的透视投影。
如上图所示,E为视点,X为待投影点,Y为投影后的点,P为平面内一点,N为平面法向量。
透视投影与平行投影(正交投影和斜投影)的区别是平行投影的投影光线全部是平行的,而透视投影的投影光线则来源于一个共同的点,该点即为视点。
由上图可得,
其中,t>0
4.透视投影的一种特殊情况下的简化版本。
上述的透视投影中的点是基于笛卡尔坐标系的,具有普遍性,它适用于任意的视点和任意的投影面。
在渲染管线当中,有一种特殊情况,即点的坐标基于坐标系统{E;D,U,R}。其中,E为透视点即视点。投影面的法向量与视线方向相反,即 。此时,对于任意点,其基座标为(d,u,r)。并且现在,我们寻找这样一个点,它在投影面上,并且到视点E的距离最短(设此距离为)。显然,这个点就是视点E到投影面的正交投影。通过几何关系,我们可以得到:
将以上四个共识代入一般情况下的投影方程,可得
也就是说点被投影到了点
更进一步,通常情况下,,因此上式可进一步简化为我们发现所有点在投影后第一个坐标恒为1,这是必然的。
5.透视投影的一条重要性质:变换的非线性性质。
我们可以发现,从所有的线性变换和仿射变换一直到投影中的平行投影,其变换方程均为线性方程,而唯独透视投影的变换方程为非线性方程,这说明,在进行透视投影之后,原来分布均匀的一条直线上的点,变成了分布不均匀的直上一串点,这在光栅化的过程中会引起失真,解决方法是用某个参数进行校正,参数的求法此处略,详见P36---P39
四,将所有的变换用同一种形式——齐次矩阵来表示。
1.线性变换。
其中,为3阶方阵,为3维列向量。
2.仿射变换
其中,为平移向量。
3.透视投影(正交投影和斜投影都是仿射变换)
说明:
对于透视投影以外的其他变换,左乘矩阵一步即可完成。
而对于透视投影,左乘矩阵这一步并没有进行真正的投影变换,它仅仅是为透视除法准备w,透视除法完成后,才算是完成了投影变换。
另外,这些矩阵在实际的渲染过程中并不是单独出现的,而是以连接矩阵的形式出现,并且,透视矩阵并不是最后的矩阵,还要进一步转变为裁减矩阵。