计算机图形学

从游戏到影视特效,屏幕上每一个 3D 场景都是线性代数的产物。本课程学过的线性变换、矩阵乘法、叉积与行列式,正是图形学的日常工具。

一、3D 变换:一切皆矩阵

物体的缩放、旋转、平移全部用矩阵表示:

p′=M投影⋅M旋转⋅M平移⋅p\mathbf{p}' = M_{\text{投影}} \cdot M_{\text{旋转}} \cdot M_{\text{平移}} \cdot \mathbf{p}
  • 矩阵乘法 = 变换的复合:先平移,再旋转,最后投影
  • 多个变换可以预先合并成一个矩阵,一次乘法完成全部变换

二、齐次坐标:用 4×4 矩阵统一所有变换

齐次坐标:在三维坐标后面补一个分量 ww(通常取 w=1w = 1),用 4×4 矩阵统一表示变换(含平移)。

为什么需要它?因为平移 p+t\mathbf{p} + \mathbf{t} 不是线性变换(原点会移动),无法写成 3×3 矩阵。引入齐次坐标后,平移也能写成矩阵乘法:

(p′1)=(I3t01)(p1)\begin{pmatrix} \mathbf{p}' \\ 1 \end{pmatrix} = \begin{pmatrix} I_3 & \mathbf{t} \\ 0 & 1 \end{pmatrix} \begin{pmatrix} \mathbf{p} \\ 1 \end{pmatrix}
  • 旋转、缩放、平移、错切全部统一为 4×4 矩阵
  • 多个变换复合 = 4×4 矩阵相乘,仍然一次乘法完成

三、法向量与相机变换

  • 法向量计算:两个不共线向量的叉积得到所在平面的法线(回忆叉积的几何意义:结果垂直于两个输入向量,长度等于平行四边形的面积)
  • 相机变换:把世界坐标转换到相机坐标——本质是一次基变换(换坐标系)

四、渲染管线:一连串矩阵乘法

渲染管线的每一步都是一次矩阵运算:

阶段线性代数操作
模型变换把物体从模型坐标变到世界坐标
视图变换把世界坐标变到相机坐标
投影变换把 3D 坐标投影到 2D 屏幕(透视/正交)
裁剪判断顶点是否在视锥内

GPU 并行处理这些矩阵乘法——一个游戏画面每帧要执行数百万次。

总结

本文出现的符号

符号类型读音/说明在本文中的含义
p\mathbf{p}数学符号p顶点的位置向量
p′\mathbf{p}'数学符号p prime变换后的顶点位置
M投影M_{\text{投影}}数学符号M projection投影变换矩阵
M旋转M_{\text{旋转}}数学符号M rotation旋转变换矩阵
M平移M_{\text{平移}}数学符号M translation平移变换矩阵
I3I_3数学符号I 33×3 单位矩阵
t\mathbf{t}数学符号t平移向量
ww数学符号w齐次坐标的附加分量(通常取 1)
×\times数学符号cross叉积,用于求法向量

中英对照

中文术语英文术语音标说明
计算机图形学computer graphics/kəmˈpjuːtə ˈɡræfɪks/用计算机生成和处理图像的科学
齐次坐标homogeneous coordinates/ˌhɒməˈdʒiːniəs kəʊˈɔːdɪnəts/补一个 ww 分量,用 4×4 矩阵统一变换
渲染管线rendering pipeline/ˈrendərɪŋ ˈpaɪplaɪn/模型变换→视图变换→投影→裁剪的流程
模型变换model transform/ˈmɒdl trænsˈfɔːm/物体坐标到世界坐标
视图变换view transform/vjuː trænsˈfɔːm/世界坐标到相机坐标
投影变换projection transform/prəˈdʒekʃən trænsˈfɔːm/3D 坐标到 2D 屏幕
裁剪clipping/ˈklɪpɪŋ/剔除视锥外的几何
法向量normal vector/ˈnɔːml ˈvektə/垂直于平面的向量,用叉积计算
叉积cross product/krɒs ˈprɒdʌkt/结果垂直于两个输入向量的向量运算
相机变换camera transform/ˈkæmərə trænsˈfɔːm/把世界坐标换到相机坐标系
GPUgraphics processing unit/ˈɡræfɪks prəˈsesɪŋ ˈjuːnɪt/专为并行矩阵运算设计的处理器

发现内容有问题?

告诉我们哪里需要改进。