最近开始补一直没学的图形学内容,发现部分内容在学 SLAM 的时候都见过,这种似曾相识的感觉还是挺有意思的。
Lecture 1 概论
课程大纲:
- Rasterization(光栅化):将三维空间几何形体投影到平面
- Curves and Meshes(几何、曲线与曲面)
- Ray Tracing(光线追踪)
- Animation / Simulation(动画与模拟)
课程主页:https://sites.cs.ucsb.edu/~lingqi/teaching/games101.html
课程视频:https://www.bilibili.com/video/av90798049
图形学和计算机视觉的区别:
- 计算机视觉对图像进行猜测,并尝试理解其中的信息。
- 图形学将模型信息准确的表现为图形。

两者的区别Lecture 2 线性代数
图形学前置知识:
- 【数学】线性代数 / 微积分 / 统计学
- 【物理】光学 / 力学
- 【杂项】信号处理 / 数值分析
向量
- 默认使用列向量,可以写作 (x,y,z)T
- 使用结束点减去起始点得到 AB=B−A
- 加减遵循平行四边形法则
- 用 ∥a∥ 表示向量长度
- 用 a^ 表示与 a 向量同方向的单位向量,a^=∥a∥a
点乘
- a⋅b=∥a∥∥b∥cosθ⇒cosθ=∥a∥∥b∥a⋅b 对于单位向量有 cosθ=a^⋅b^
- 向量点乘满足交换律和分配律
- a⋅b=b⋅a
- a⋅(b+c)=a⋅b+a⋅c
- (ka)⋅b=a⋅(kb)=k(a⋅b)
- 在笛卡尔坐标系下
- 应用场景:
- 计算两个向量之间的夹角
- 计算向量在另一个向量上的投影
- 两个向量之间的垂直距离(减去投影向量)
- 描述两个向量的前后关系(如下图)

向量点乘的应用场景叉乘
- 两个向量 a,b 叉乘得到一个与两个向量都垂直的向量
- 方向遵循右手定则,从 a 到 b,拇指方向为叉乘后的向量方向
- 大小为 ∥a∥∥b∥sinθ
- 在笛卡尔坐标系中
可以用反对称矩阵表示
- 不满足交换律:a×b=−b×a,满足分配律
- 应用场景:
- 建立三维直角坐标系(右手系)
- 通过右手法则判断向量左右关系(看最后叉乘向量方向)
- 判断点在多边形内:以三角形为例,判断点 P 在三角形 ABC 内即判断 AB×AP,BC×BP,CA×CP 结果向量是否同向(同号)

向量叉乘的应用场景矩阵
- 矩阵乘法没有交换律(矩阵的左乘和右乘代表不同的变换关系,所以是不能换的),有结合律和分配律
- (AB)T=BTAT
- 应用:对图像矩阵进行旋转、平移、缩放、投影等
常见的变换性质(来自视觉 SLAM 十四讲):
R 是正交矩阵,A 是可逆矩阵,s 是缩放因子,t 是平移,aT 是缩放,v 是齐次时增加的量
变换名称 | 矩阵形式 | 自由度 | 不变性质 |
---|
欧式变换 | [R0Tt1] | 6 | 长度、夹角、体积 |
相似变换 | [sR0Tt1] | 7 | 体积比 |
仿射变换 | [A0Tt1] | 12 | 平行性、体积比 |
射影变换 | [AaTtv] | 15 | 接触平面的相交和相切 |
作业 0 题解
其实这个作业就是配一个环境,照着需要的去安装就行了,推荐 Windows 下环境用这个:
- 【WSL】Windows 的 Linux 子系统
- 【Xming】用来给 WSL 打开 GUI 界面的
- 【Eigen】矩阵运算的库
- 【GCC】C++ 编译器
- 【Cmake】编译工具
- 【Opencv 3.4】推荐这个版本,我上 2020 课程是用的这个