《C++从零打造渲染器》学习笔记 第1讲(上):3D数学基础(上)

第1讲(上):3D数学基础(上)


说明:本教程基于B站图形学大佬 发财学长 制作的 C++从零打造渲染器 系列视频。写这篇文章的目的主要是作个人学习笔记,如果这份笔记能帮到他人,本人不胜荣幸

多数内容在 初高中数学 高等数学 线性代数 课程已经介绍很详细了,这里不过多解释。本文章主要讨论这些课程未覆盖到,与图形学强相关的知识点

视频链接:【C++从零打造渲染器】第1讲(上集):3D数学基础(线性代数、向量、行列式、旋转矩阵、缩放矩阵)

视频链接:【C++从零打造渲染器】第1讲(下集):3D数学基础(平移变换、坐标系间的转换、世界坐标系、世界变换矩阵)


坐标系

二维坐标系

三维坐标系:左手系 右手系

极坐标系

球面坐标系


向量

向量矩阵形式:行向量 列向量(常用)

运算:加,减,数乘,取模,单位化,点乘,叉乘

向量混合积=向量构成平行六面体体积=向量构成行列式

\[\mathbf{a} \cdot (\mathbf{b} \times \mathbf{c}) = \begin{vmatrix} a_1 & a_2 & a_3 \\ b_1 & b_2 & b_3 \\ c_1 & c_2 & c_3 \end{vmatrix} \]


行列式

克拉默法则

假设有一个包含 \(n\) 个未知数、\(n\) 个方程的线性方程组:

\[\begin{cases} a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n = b_1 \\ a_{21}x_1 + a_{22}x_2 + \dots + a_{2n}x_n = b_2 \\ \dots \\ a_{n1}x_1 + a_{n2}x_2 + \dots + a_{nn}x_n = b_n \end{cases} \]

将其写成矩阵形式 \(A\mathbf{x} = \mathbf{b}\)

\(j\) 个未知数 \(x_j\) 的值为:

\[x_j = \frac{|A_j|}{|A|} \]

  • \(|A_j|\):将系数矩阵 \(A\)\(j\)替换为常数向量 \(\mathbf{b}\) 后,得到的新矩阵的行列式。

几何变换

  • 任何一个矩阵变换都可以写成矩阵的形式

  • 几何变换的逆,就是矩阵的逆

缩放

例1:把下面的图形放大\(5\)

2026-07-04-10-36-07-image

例2:沿着\(x\)轴放大\(3\)倍,沿\(y\)轴缩小\(\frac{1}{3}\)

2026-07-10-01-17-38-image

变换矩阵:\(\begin{bmatrix} s_x & 0 \\ 0 & s_y \end{bmatrix}\) 逆变换:\(\begin{bmatrix} \frac{1}{s_x} & 0 \\ 0 & \frac{1}{s_y} \end{bmatrix}\)

旋转

例1:在二维平面中,把P点旋转\(\theta\)

2026-07-10-01-26-10-1783617968728428330

变换矩阵:\(\begin{bmatrix} \cos\theta & -\sin\theta \\ \sin\theta & \cos\theta \end{bmatrix}\)逆变换:\(\begin{bmatrix} \cos\theta & sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}\)

例2:在三维空间中,把P点绕Z轴旋转\(\theta\)

2026-07-10-01-29-48-image

绕z轴旋转\(\begin{bmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix}\)

绕x轴旋转\(\begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta \\ 0 & \sin\theta & \cos\theta \end{bmatrix}\)

绕y轴旋转\(\begin{bmatrix} \cos\theta & 0 & \sin\theta \\ 0 & 1 & 0 \\ -\sin\theta & 0 & \cos\theta \end{bmatrix}\)

旋转方向遵循右手螺旋法则

例3:把P点绕X轴旋转\(\alpha\)度,再绕Y轴旋转\(\beta\)度,再绕X轴旋转\(\gamma\)

其实就是左乘三个旋转矩阵

变换矩阵:\(\begin{bmatrix} \cos\gamma & -\sin\gamma & 0 \\ \sin\gamma & \cos\gamma & 0 \\ 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} \cos\beta & 0 & \sin\beta \\ 0 & 1 & 0 \\ -\sin\beta & 0 & \cos\beta \end{bmatrix}\begin{bmatrix} \cos\alpha & -\sin\alpha & 0 \\ \sin\alpha & \cos\alpha & 0 \\ 0 & 0 & 1 \end{bmatrix}\)

\(\alpha,\beta,\gamma\)合称为欧拉角

欧拉角既可以表示变换,也可以表示朝向

朝向和变换本质是一回事的,朝向的意思就是对图形原始朝向做了什么变换