第 67 章 线性代数在计算机图形学中的应用¶
前置:线性变换 (Ch05) · 齐次坐标 · 几何代数 (Ch50) · 投影 (Ch07)
本章脉络:从几何实体到像素映射 \(\to\) 齐次坐标 (Homogeneous Coordinates) 的代数构造 \(\to\) 仿射变换:平移、旋转、缩放的矩阵统一表示 \(\to\) 视图变换与透视投影 (Perspective Projection) \(\to\) 深度缓存与 Z-变换 \(\to\) 法向量变换与逆转置矩阵 \(\to\) 样条曲线与曲面的线性控制点表示 \(\to\) 应用:3D 游戏引擎架构、电影特效中的骨骼动画、光线追踪、虚拟现实 (VR)
延伸:计算机图形学是线性代数的“视觉呈现”;它将三维世界的刚体运动与光影传播映射为一系列 4 阶矩阵的级联乘法,证明了逼真的视觉体验本质上是齐次射影几何的矩阵运算,是现代视觉算力的数学灵魂
在 3D 游戏或电影中,屏幕上的每一帧图像都是通过数百万次矩阵乘法生成的。计算机图形学(Computer Graphics)的核心任务是将虚拟的三维模型投影到二维屏幕上。线性代数通过齐次坐标将平移与旋转统一为矩阵运算,通过投影矩阵模拟人类视觉的透视效果。本章将介绍这一作为虚拟现实基石的代数技术。
67.1 齐次坐标与仿射变换¶
定义 67.1 (齐次坐标)
为了在矩阵乘法中统一处理平移,将 3 维点 \((x, y, z)\) 扩展为 4 维向量 \((x, y, z, 1)^T\)。 - 平移矩阵 \(T(\mathbf{d})\):\(\begin{pmatrix} I_3 & \mathbf{d} \\ 0 & 1 \end{pmatrix}\)。 - 旋转矩阵 \(R\):\(\begin{pmatrix} R_{3\times 3} & 0 \\ 0 & 1 \end{pmatrix}\)。
67.2 透视投影矩阵¶
技术:透视投影
透视投影利用相似三角形原理,使远处的物体看起来更小。其标准矩阵形式为: $\(P = \begin{pmatrix} 1/(\text{tan}(\alpha/2) \cdot \text{aspect}) & 0 & 0 & 0 \\ 0 & 1/\text{tan}(\alpha/2) & 0 & 0 \\ 0 & 0 & -(f+n)/(f-n) & -2fn/(f-n) \\ 0 & 0 & -1 & 0 \end{pmatrix}\)$ 最后的除以 \(w\) 步骤实现了非线性的透视效果。
67.3 法向量的变换¶
定理 67.1 (法向量变换规则)
若表面经过非均匀缩放变换 \(M\),其法向量 \(\mathbf{n}\) 必须使用 \(M\) 的逆转置矩阵 \((M^{-1})^T\) 进行变换,以保持其与切平面的垂直性。
练习题¶
1. [基础] 写出将点绕 \(z\) 轴旋转 90 度的 \(4 \times 4\) 齐次旋转矩阵。
参考答案
构造: 1. 3 阶旋转部分:\(R_z(90^\circ) = \begin{pmatrix} 0 & -1 & 0 \\ 1 & 0 & 0 \\ 0 & 0 & 1 \end{pmatrix}\)。 2. 嵌入 4 阶矩阵: 结论:\(R = \begin{pmatrix} 0 & -1 & 0 & 0 \\ 1 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{pmatrix}\)。
2. [计算] 将点 \(P = (1, 2, 3)^T\) 平移向量 \(\mathbf{d} = (1, 1, 1)^T\)。使用齐次矩阵完成。
参考答案
矩阵乘法: \(\begin{pmatrix} 1 & 0 & 0 & 1 \\ 0 & 1 & 0 & 1 \\ 0 & 0 & 1 & 1 \\ 0 & 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} 1 \\ 2 \\ 3 \\ 1 \end{pmatrix} = \begin{pmatrix} 1\cdot 1 + 1\cdot 1 \\ 1\cdot 2 + 1\cdot 1 \\ 1\cdot 3 + 1\cdot 1 \\ 1 \end{pmatrix} = \begin{pmatrix} 2 \\ 3 \\ 4 \\ 1 \end{pmatrix}\)。 结论:新坐标为 \((2, 3, 4)\)。
3. [缩放] 判定:若矩阵为 \(\operatorname{diag}(2, 2, 2, 1)\),物体的体积如何变化?
参考答案
分析: 1. 这是一个在三个主轴上都放大 2 倍的等比缩放。 2. 行列式 \(\det(M_{3\times 3}) = 2^3 = 8\)。 结论:物体的体积变为原来的 8 倍。
4. [复合变换] 在图形学中,为什么 \(TR \neq RT\)?
参考答案
几何逻辑: - \(TR\):先旋转,再在世界坐标系下平移。 - \(RT\):先平移,再绕世界原点旋转。 由于矩阵乘法不交换,操作的顺序决定了物体是“原地旋转后移走”还是“移走后绕原点画圈”。
5. [投影] 齐次坐标中的最后一个分量 \(w\) 的作用是什么?
参考答案
多重作用: 1. 区分向量与点:点 \(w=1\),向量(方向)\(w=0\)(平移对向量无效)。 2. 实现透视:在透视投影后,\(w\) 变为 \(-z\)。通过将坐标除以 \(w\),实现了“远小近大”的非线性映射。
6. [法向量] 为什么法向量不能直接乘以变换矩阵 \(M\)?
参考答案
理由: 考虑非均匀缩放,如沿 \(x\) 轴拉伸 2 倍。 如果平面切向量为 \((1, 1)\),法向量为 \((-1, 1)\)。 变换后切向量变为 \((2, 1)\)。若法向量也乘以 \(M\),变为 \((-2, 1)\)。 计算内积:\((2)(-2) + (1)(1) = -3 \neq 0\)。它们不再垂直。 使用 \((M^{-1})^T\) 变换后的法向量为 \((-0.5, 1)\),内积为 \((2)(-0.5) + (1)(1) = 0\)。
7. [应用] 什么是图形学中的“视图矩阵”(View Matrix)?
参考答案
视图矩阵是将物体从“世界坐标系”变换到“相机坐标系”的矩阵。 它本质上是相机本身位姿矩阵的逆矩阵。线性代数证明了“相机向前走”在数学上完全等价于“整个世界向后走”。
8. [计算] 写出将点从齐次坐标 \((4, 2, 8, 2)^T\) 还原为普通 3D 坐标的结果。
参考答案
执行透视除法: \(x = 4/2 = 2\) \(y = 2/2 = 1\) \(z = 8/2 = 4\) 结论:3D 坐标为 \((2, 1, 4)\)。
9. [骨骼动画] 简述矩阵权重的线性混合(LBS)的基本思想。
参考答案
人体皮肤上的一个顶点 \(v\) 会受到相邻两根骨骼(两个矩阵 \(M_1, M_2\))的影响。 最终位置 \(v' = (\alpha M_1 + (1-\alpha) M_2) v\)。 这利用了矩阵空间的线性组合,使得皮肤能够随骨骼平滑地弯曲。
10. [应用] 简述 GPU(图形处理器)为什么设计为并行的矩阵运算架构。
参考答案
理由: 图形渲染本质上是对数百万个顶点独立执行完全相同的 \(4 \times 4\) 矩阵乘法。这种任务不具有逻辑依赖性,是典型的“单指令流多数据流”(SIMD)。GPU 通过上千个核心并行执行矩阵运算,将渲染时间从几分钟缩短到了几毫秒。
本章小结¶
线性代数是虚拟世界的“物理定律”:
- 齐次的和谐:齐次坐标将复杂的欧氏变换统一为简单的矩阵乘法,确立了图形管线的标准计算协议。
- 维度的投影:透视变换矩阵证明了视觉的纵深感本质上是一种非线性的投影算子,揭示了光学成像的代数本质。
- 计算的艺术:从法向量的逆转置到骨骼的线性混合,图形学中的每一个逼真细节都源于对矩阵空间几何性质的精准操控,支撑了现代数字媒介的视觉革命。