8.1 变换物体与变换坐标系

为何需要变换坐标系?下图展示了一把枪正向汽车发射子弹。现在想象下世界坐标系被旋转到和车坐标系重合的位置,与此同时保持车、枪、子弹弹道不变(右图)。这样我们就得到了枪和弹道在车的物体坐标系中的坐标,方便检测子弹会否击中汽车
若反过来将车放到到世界坐标系中,要花费更多时间(车模型上的顶点太多)

解决问题,可以变换物体,也可以变换坐标系,总有一个更适合。然而,这两种变换实际上是等价的,将物体变换一个量等价于将坐标系变换一个相反的量
8.2 旋转
8.2.1 2D 中的旋转
我们知道了旋转后的基向量的值,,就可以以下面公式构造矩阵

8.2.2 3D 中的旋转
旋转正方向的定义。左手法则(左手坐标系)是:大拇指向上,其余四指弯曲。大拇指指向旋转轴的正方向,四指弯曲的方向就是旋转的正方向。右手法则同理

求出旋转后的基向量,可以得到绕 x 轴旋转的矩阵

同理可得到绕 y 轴旋转的矩阵

和绕 z 轴旋转的矩阵

8.2.3 3D 中绕任意轴的旋转
(这里有亿点复杂,想了解的看原书吧)
8.3 缩放
分为均匀缩放(等比缩放)和非均匀缩放
8.3.1 沿坐标轴的缩放
2D 中的

3D 中的

8.3.2 沿任意方向缩放
通过基向量构造矩阵,得到以单位向量 n 为缩放方向,k 为因子的缩放矩阵

3D 中的

8.4 正交投影
一般来说,投影意味着降维(3D -> 2D)操作

8.4.1 向坐标轴或平面上投影


8.4.2 向任意直线或平面投影
投影由垂直于直线或平面的单位向量 n 定义。通过使该方向的缩放因子为 0 能够导出向任意方向投影的矩阵

3D 中,向垂直于 n 的平面投影的矩阵公式

8.5 镜像

使缩放因子为 -1 能够很容易地实现镜像变换。设 n 为 2D 单位向量,沿通过原点且垂直于 n 的反射轴来进行镜像变换的矩阵

3D 中用反射平面代替直线

8.6 切变
切变是一种坐标系“扭曲”的变换,非均匀地拉伸它,令人惊奇的是面积和体积保持不变
实现切变变换的矩阵为

记法 的意义是 x 坐标根据坐标 y 被切变,参数 s 控制着切变的方向和量。另一种 2D 切变矩阵是

3D 中的切变方法是取出一个坐标,乘以不同因子再加到其他两个坐标上。记法 的意义是 x, y 坐标被坐标 z 改变

8.7 变换的组合
设想世界中有一个物体,我们要把它渲染到摄像机中。为此,必须将物体的所有顶点从物体坐标系变换到世界坐标系,接着再变换到摄像机坐标系

矩阵乘法满足结合律,因此我们能用一个矩阵直接从物体坐标系变换到摄像机坐标系

这样在做大量顶点变换时,能提升不少效率

几何解释
矩阵乘法 AB,结果中的每一行都是 A 中相应行与矩阵 B 相乘的结果。矩阵乘法能够写为

8.8 变换分类
8.8.1 线性变换
8.2 到 8.6 讨论的所有变换都能用矩阵乘法表示,所以它们都是线性变换
8.8.2 仿射变换
线性变换后接着平移
8.8.3 可逆变换
除了投影外,其他变换都能“撤销”(可逆)
8.8.4 等角变换
若变换前后两向量夹角的大小和方向都不改变,该变换是等角的。只有平移、旋转和均匀缩放属于此变换
8.8.5 正交变换
正交变换的基本思想是轴保持互相垂直,而且不进行缩放变换。平移、旋转和镜像是仅有的正交变换。所有正交矩阵都是仿射和可逆的
8.8.6 刚体变换
只改变物体的位置和方向,不包括形状。平移和旋转是仅有的刚体变换