GAMES101 [1] Affine Transformation & Projection
仿射变换 Affine Transformation
线性变换 Linear Transformation
本质上,二维空间中某一个点/向量的旋转和缩放都是对其坐标值进行某种线性变换,因此二维空间图形的线性变换可以通过一个二维方阵来实现。
旋转 Rotation
- 对于旋转,可以取两个特殊点来简单推导旋转变换矩阵(类似于用基向量变换的方式来理解),
和 ,逆时针旋转 :
观察图像可知:
由此可以写出变换矩阵
:
缩放 Scale
同理可得缩放矩阵
:
平移变换 & 齐次坐标 Translation & Homogeneous Coordinates
由于平移变换并非线性变换,因此无法使用一个与空间维度同维的方阵来表示。解决方法是给变换矩阵添加一个新的维度,也就是引入齐次坐标 Homogeneous coordinates,以此来为坐标值增加平移量。
在二维里,我们把点写成三维的形式:
如此一来,我们就能使用一个
的矩阵同时表示线性变换和平移变换。以向上平移 1 个单位,向右平移 2 个单位的二维变换矩阵为例:
将矩阵的第三列写为
意味着图像在变换中没有发生平移,左上角 的分块矩阵仍表示二维图形的线性变换。
齐次坐标表示法的妙用
齐次坐标表示法中,第三个新填入的值在表示“点”时写为
,而表示“向量”时写为 。这是一个非常巧妙的设计,原因如下:我们希望点和向量在进行变换的前后遵循如下规则:
- 点 + 向量 = 点
- 向量 + 向量 = 向量
- 点 - 点 = 向量
- 点 + 点 = 中点(非一般规则)
上述的规则刚好满足这些要求。
例如,点与点相减得到向量(第三项为
):
此外还有一点:仅代表方向的向量不受平移变换的影响:
这也是非常符合直觉和数学定义的。
齐次坐标表示法的比例不变性与透视直觉
对于一个使用齐次坐标表示法表示的二维平面上的点:
若将其整体乘以一个非零常数,结果仍然表示相同的点:
这是一个非常有趣的性质,因为这在某种程度上意味着 齐次坐标表示法所表示的点,是一条从视口中心出发的射线。
- 当然,这条射线不是这个点所在的二维平面上的射线,而是为了描述射影点而引入的几何解释。换言之,观察一张照片时,大脑想象出的“深度空间”(射影空间)中,由摄像机出发的一条射线。
- 严格来说,在由
构成的抽象三维空间中,所有形如 的点构成了一条穿过坐标原点的射线。选择 平面作为截面,就能得到普通二维坐标 。
我们可以用三维空间中的透视投影来建立一种直觉上的类比,如图:
我们假设摄像机中心位于坐标原点,观察方向为
,成像平面位于相机前方的某个固定深度,例如 ,观察上图可以发现,对于一个处于 平面坐标原点,面朝 方向的观察者而言, 与 这两个点在其视野中事实上是 重合 的,它们在针孔相机中会投影到同一个图像位置。换言之,这两个点在相机视野里是等价的(投影到同一个二维图像位置),它们的大小比例只取决于距离相机的深度(近大远小)。
这就是为什么齐次坐标表示法被设计成如此,甚至于它的名字“齐次”本身就意味着“按同一比例变化”。其多出的一个维度不仅解决了平移变换的矩阵乘法表示,其比例不变性更是天然为透视投影与消除距离缩放而生的数学工具。
或许这样巧妙契合视觉的性质会让人心生感慨,感叹数学的精妙乃至于相信造物主的存在。但事实上这仅仅只是一种“必然的巧合”,即设计好的巧合。究其原因就在于我们人类对于这个世界特定频段波(可见光)的感知方式:视觉,它决定了古代数学家在描述三维空间到二维平面的透视投影时,会创造出什么样的数学工具。
事实上,所谓计算机图形学(起码在光栅化渲染领域)也就是模拟人眼/摄像机对于三维世界所发出和反射的光的感知方式。我们“看”到的并不是几何本体,我们的双眼呈现给大脑的信息本身就已经是“投影”的结果。就好比所谓的“洞穴寓言”,我们所看到的一切都只是某种投影所衍生的幻象。
设想一下,如果我们可以通过某种神奇的“新型视觉”直接感知距离以及穿透物体,齐次坐标表示法“等比例缩放不变性”还会显得如此自然且必要吗?显然不会。对我们的“新型视觉”来说,
和 将不会被视作“重合/等价”——就如同他们的坐标看上去的那样,它们就是真实三维空间中两个距离迥异的点。齐次坐标表示法的等比例缩放不变性对这种“新视觉”可以说是毫无作用。简而言之,高一维度的齐次坐标所具备的等比例缩放不变性,本质上是因为我们的视觉天然压缩了距离。因此是人类主动选择为齐次坐标增添“等比例缩放不变的性质”以表示投影平面的点坐标,而不是反过来。
三维空间中的仿射变换矩阵
旋转:
绕 X 轴:
绕 Y 轴:
绕 Z 轴:
缩放和平移与二维同理,此处略过。
视图变换
一般约定摄像机需位于三维坐标的原点,面朝
方向。视图变换的过程就是将一个场景中任意摆放的摄像机位移到约定的位置。一般使用如下三个参数定义摄像机在世界坐标空间中的位置:
: eye position : gaze direction : top direction
NOTE 上的尖角表示这是一个 单位向量要想写出一个变换矩阵,使得摄像机所在的空间变换到我们先前的约定方式,也就是:
一般约定摄像机需位于三维坐标的原点,面朝
方向这是相当困难的,因为摄像机很可能处于一种非标准的状态,即位置不位于原点,
和 可能朝向非坐标轴方向。想要简单的写出一个能将他们全部变换到约定形式的矩阵非常困难,因此我们想到可以利用矩阵在空间变换中的 可逆 性质来倒推变换矩阵。即 写出使得位于三维坐标的原点,面朝
方向,顶部朝向 方向的摄像机,变换为当前摄像机位置的变换矩阵,而后求该矩阵的逆矩阵。注意到旋转变换矩阵是正交矩阵,因此:
为什么旋转变换矩阵一定是正交矩阵?
当然,还有平移变换矩阵:
如此一来,视图变换就完成了:
投影变换
在进行投影变换前,应当先 应用视图变换,进入以相机为中心的坐标系。换言之,将摄像机置于坐标原点,摄像机面朝的方向是
正交投影 Orthographic Projection
对于正交投影,主要的步骤是将摄像机前方的可视区域变换成一个 标准立方体,即在三维都在 -1 ~ 1 之间的立方体空间。
对于摄像机坐标系,一般情况下其正交可视区域已经天然关于 Z 轴对称。考虑到视角裁剪和部分渲染的情况,仍然需要将可视区域视作一个可能存在于任何位置的长方体。
因此,我们需要将其平移到坐标原点,然后缩放为标准立方体(canonical cube),然后进行视口变换和光栅化。
变换矩阵:
先平移后缩放
透视投影 Perspective Projection
近远平面变量
分别表示它们在相机空间中的带符号 坐标,因此:
- 对于透视投影,摄像机面朝的可视区域不再是一个长方体,而是一个 截头四棱锥。投影的思路是先将这个截头四棱锥变换成为正交投影中,被转换为标准立方体之前的长方体可视区域,然后再进行正交投影。 因此透视投影本质上就是在
右侧乘一个新的变换矩阵 (先将截头四棱锥变换为正交可视区域,也就是那个长方体)。
上图有些许的不准确,因为透视投影中,截头四棱锥的近截面应该在
观察上图可知:
- 截头四棱锥中任意垂直于
轴的截面,都将被缩放到 的平面大小 和 处的平面,变换前后的齐次坐标在完成齐次除法之后,其三维坐标中的深度仍然是 和
- 截头四棱锥中任意垂直于
可以通过一个简单的剖面图理解这种变换的规律:
显然,对于平面
上的点 来说,有:对于该平面,缩放变换矩阵为:
由于我们希望得到的是一个对于整个可视区域通用的变换矩阵,而上面这个矩阵仅作用于平面
。对此我们可以利用齐次坐标表示法的等比例缩放不变性,将变换关系转换为:对于这样的变换,其变换矩阵可以很容易的写出:
对于该矩阵第三行的推导,我们同样可以使用先前推导旋转变换矩阵那样,选择两个特殊平面:
和
注意到变换后结果的第三分量与
无关,由此可以判断变换矩阵的第三行前两项均为 。设剩余两项分别为 ,有:得到方程组及其唯一解:
至此,我们就得到了
:也就有:
Z 轴深度非线性挤压
注意到应用
前后,摄像机可视区域内点集的深度值变化并不均匀。具体来说,设可视区域内某一点
经由
变换后:齐次除法:
得到新的深度
,与 相减:可知:
在变换后,其相距坐标原点的距离增大,即摄像机可视区域中的点集在变换后,被整体推向远平面挤压。
End
- Title: GAMES101 [1] Affine Transformation & Projection
- Author: Last
- Created at : 2026-08-22 12:13:24
- Link: https://blog.imlast.top/2026/08/22/games101-1/
- License: This work is licensed under CC BY-NC-SA 4.0.