计算机图形学必备数学基础:Computer Graphics from Scratch线性代数指南
计算机图形学的核心在于将数学理论转化为视觉效果,而线性代数正是连接抽象概念与图形渲染的桥梁。本文基于开源项目Computer Graphics from Scratch的附录A0-linear-algebra.md,为初学者提供一套系统的线性代数入门指南,帮助你掌握图形编程中必备的数学工具。
坐标系统:图形世界的基石
所有图形操作都始于坐标系统。在计算机屏幕上,我们通常使用二维笛卡尔坐标系定位像素位置。
图1:屏幕坐标系统示例,原点(0,0)位于左上角,X轴向右延伸,Y轴向下延伸
而在3D图形计算中,我们会将屏幕坐标转换为以中心为原点的标准化设备坐标:
图2:中心原点坐标系统,X轴范围[-960,960],Y轴范围[-540,540],适用于3D投影计算
点与向量:构建空间的基本元素
点:位置的数字化表示
点(Point)是空间中的位置标记,用坐标值表示。在2D空间中,点P表示为(Pₓ, Pᵧ);在3D空间中则为(Pₓ, Pᵧ, P_z)。
图3:点P(4,3)在二维坐标系中的表示,x坐标为4,y坐标为3
向量:方向与大小的数学描述
向量(Vector)代表两点之间的位移,包含方向和大小两个属性。与点不同,向量没有固定位置,仅表示相对位移。
向量的关键运算包括:
- 向量减法:两点相减得到向量(P-Q=V)
- 向量加法:向量叠加形成新向量(V+W=R)
- 标量乘法:改变向量长度或方向(k·V)
图8:向量V乘以不同标量得到的结果,正数改变长度,负数同时改变方向
向量乘法:图形计算的核心工具
点积:角度与投影的计算
点积(Dot Product)是两个向量的乘积运算,结果为标量:
V·W = VₓWₓ + VᵧWᵧ + V_zW_z = |V||W|cosθ
点积可用于计算向量夹角、判断方向关系以及实现光照计算中的漫反射效果。
叉积:法向量与方向判断
叉积(Cross Product)仅适用于3D向量,结果是垂直于两个输入向量的新向量:
V×W = (VᵧW_z - V_zWᵧ, V_zWₓ - VₓW_z, VₓWᵧ - VᵧWₓ)
叉积在图形学中用于计算平面法向量、判断点的位置关系以及构建3D坐标系。
矩阵:变换的数学表示
矩阵(Matrix)是图形变换的基础工具,可表示旋转、缩放、平移等操作。在计算机图形学中,4×4矩阵被广泛用于3D变换,通过矩阵乘法将点和向量从一个坐标系转换到另一个坐标系。
矩阵乘法遵循"行乘列"规则,这一操作是实现3D模型视图变换、投影变换的核心。通过组合不同变换矩阵,我们可以实现复杂的物体运动和视角变化。
实用技巧:从理论到实践
- 向量归一化:将向量除以其模长得到单位向量,用于表示方向
- 法向量计算:通过叉积获取平面法线,用于光照计算
- 矩阵组合:按顺序组合缩放、旋转、平移矩阵实现复杂变换
- 坐标转换:掌握世界坐标、相机坐标、屏幕坐标之间的转换关系
通过A0-linear-algebra.md中的详细公式和推导,你可以系统学习这些概念的数学原理,为深入图形编程打下坚实基础。
掌握这些线性代数工具后,你将能够理解3D渲染 pipeline 的工作原理,实现从简单的线条绘制到复杂的光照效果,真正体验从数学公式到视觉效果的神奇转化!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考








