BK / GRAPHICS NOTES
MATHEMATICS / 01

向量:把方向和长度放进同一个量

移动一个顶点、计算表面朝向、发射一条光线——这些动作都在回答“往哪里、走多远”。向量就是图形学描述这些问题的基础语言。

阅读约 8 分钟前置:基础代数难度:入门

01 / 向量描述什么

标量只有大小,例如时间 2 秒、亮度 0.8;向量同时具有大小和方向。二维向量可写作 v = (x, y),三维向量则写作 v = (x, y, z)

点和向量都可能由三个数字保存,但语义不同:点表示空间中的位置,向量表示位移。两个点相减得到从一个点指向另一个点的向量;点加向量得到新的点。

方向 = 终点 - 起点
位移后的点 = 起点 + 方向 × 距离
二维坐标中的两个向量及其和aba + b
首尾相接体现向量加法;蓝色虚线是合向量。

02 / 四种核心运算

加法与数乘

向量相加会合并位移,乘以标量会缩放长度;标量为负数时还会翻转方向。动画中的连续移动与物理中的速度积分都依赖它们。

点积:比较两个方向

a · b = axbx + ayby + azbz = |a||b|cosθ

单位向量的点积直接给出夹角余弦:同向为 1,垂直为 0,反向为 -1。漫反射光照正是用表面法线与入射光方向的点积判断受光程度。

叉积:构造垂直方向

a × b = (aybz-azby, azbx-axbz, axby-aybx)

三维叉积生成同时垂直于 ab 的向量,可计算三角形法线、相机右方向。结果朝向由坐标系和操作数顺序决定。

运算结果典型用途
加法向量组合位移
数乘向量缩放速度或方向
点积标量夹角、投影、光照
叉积向量法线、坐标基

03 / 单位向量与法线

归一化把向量长度变为 1,同时保留方向。这样“方向”不会意外携带距离,使点积等运算更容易解释。

|v| = √(x² + y² + z²)
normalize(v) = v / |v|
零向量不能归一化。它的长度为 0,除法没有定义。程序中应先检查长度,或保证输入不会退化。

法线是垂直于表面的单位向量。它不是普通的位置向量:模型发生非均匀缩放后,法线通常要用模型矩阵的逆转置矩阵变换,才能继续垂直于表面。

04 / 向量在一帧画面中出现在哪里

  • 几何:顶点位置、边、切线和法线。
  • 相机:观察方向、上方向以及由它们构成的坐标基。
  • 光照:光线方向、反射方向和颜色的 RGB 三通道。
  • 动画:速度、加速度与骨骼朝向。

同为三维向量的数据不一定能直接运算。模型空间的法线不能与世界空间的光线做点积;必须先把它们变换到同一坐标空间。

05 / 常见误区

  • 把点当作方向归一化,丢失了它原本的位置意义。
  • 忘记单位化参与夹角计算的向量,导致点积不再等于余弦。
  • 交换叉积顺序;a × b = -(b × a),结果会完全反向。
  • 混用不同坐标空间的数据,得到数值合法但视觉错误的结果。
检查习惯:看到一个向量时,先问它表示位置、方向还是颜色,再问它属于哪个坐标空间。