这节课相对前几节难度会有一定提高,本节课主要会将二维变换推演到三维变换,侧重讲解视图变换(Viewing transformation),以及投影变换(projection transformation)。其中投影变化分为正交变换与透视变换两种。
三维空间中的绕轴旋转
这是最一般的绕轴旋转的情况,应该注意在绕y轴旋转时,两个正弦值的正负号与绕x轴或是z轴都略有区别。要绕着空间中任意一个轴旋转,可以将轴先移动到通过原点的位置,然后再使用罗德利斯德旋转公式来进行旋转,旋转完成后将轴位移到它应该在的位置即可。
罗德里德斯旋转公式
视图变换(Viewing transformation)
首先如何理解视图变换,它与模型变换、投影变化的关系大致可以做如下类比:
定义一个相机有三个需要确定的元素,如下图:
我们假设相机始终在原点的位置,并且看向-z的方向,向上方向为y轴,当出现一个在其它位置,看向任意方向的相机时,我们可以用Mview矩阵来将相机移到原点,并看向-z方向。
对于Mview矩阵,我们很难直接求出,我们可以先求出它的逆矩阵,又根据旋转矩阵是正交矩阵,即旋转矩阵的逆矩阵是其转置矩阵,从而得到Mview矩阵本身。
投影变换
投影变换分为正交投影和透视投影两种,这两种投影的区分主要是看是否存在进大远小的现象。人眼对事物的观察较像透视投影,存在‘一叶障目’的情况。下图可以清楚的看到两者的区别。
正交投影
透视投影
欧式几何指出在同一平面中平行的两条线不会相交,但是下图中的火车轨道却看起来像是在远方相交,这是因为这两条平行的轨道被投影在了不同的平面上。
在说透视投影之前,我们需要先了解一下齐次坐标的性质,给x,y,z同时乘上一个不为0的数,得到的新坐标仍然表示与原来相同的同一坐标。这一点是十分有用的。
那么应该如何进行透视投影呢?分为两步,首先将截面体挤压为一个立方体,然后再进行正交变化。具体流程如下图:
其中要注意,在整个缩放过程中,仅仅是远平面和近平面的z值不变,所以在针对整个锥体变化过程中的z值被写成了unknow。后使用了远平面和近平面的z值(f和n)进行代入,才解出了整个矩阵。