文章目录
一、什么是图形学?
Computer graphics: the use of computers to synthesize and manipulate visual information.
- 图形学的应用领域和应用场景:游戏、电影、动画、设计(如基于光照等的外观设计)、可视化(医学等领域)、虚拟现实/增强现实、数码插画(digital illustration)、仿真模拟(如雾、沙、黑洞)、GUI设计、 字体设计(Typography)等。
- 图形学的研究内容与挑战:研究如何创建一个贴近真实的虚拟世界,需要对实体世界的各方各面具有理解;研究如何把这个世界在设备上显示出来,需要新的计算方法、显示方法。
- 从技术上来看,图形学的内容包括:投影、曲线、曲面的数学;光照和阴影的物理学;在3D下表示和操作几何形体;动画和模拟;3D图形软件编程和相关硬件。
二、课程内容
本课程教授的内容
- 光栅化:将三维空间的几何形体显示在屏幕上。在实时图形学(30fps)中广泛应用。
- 曲线和网格:如何表示曲面、如何用简单曲面通过细分得到复杂曲面、在几何体形状发生变化时如何保持其拓扑结构等。
- 光线追踪
- 动画、模拟
本课程不涉及的内容
- OpenGL、DirectX、Vulkan等图形绘制API;
- 如何建模、如何建得好看;
- 计算机视觉领域以图像角度为切入点的研究。
课程作业
每周一个小作业,使用C++语言,提供代码框架和虚拟机环境。一般来说需要写的代码不超过20行。
大作业,使用所学知识和提供的参考,自定义主题,在课程中段开始。
(推荐使用IDE(VS/VSCode))
三、糙、快、猛的线性代数复习
图形学所涉及的知识:
- 基础数学:线代、微积分、统计;
- 基础物理:光学、力学;
- 杂项:信号处理、数值分析,…
- 以及一点点的美学。
平移、旋转和缩放等操作,均可以用向量、矩阵的计算表示。
向量
有方向和长度两个属性,没有绝对的起始位置。向量的长度(magnitude)写作 ∥ a ⃗ ∥ \| \vec a \| ∥a∥,单位向量只表示方向,写作 a ^ \hat a a^, a ^ = a ⃗ / ∥ a ⃗ ∥ \hat a = \vec a /\| \vec a \| a^=a/∥a∥。
- 在图形学中,默认向量以行形式排列,即 A = ( x y ) \bf A = \begin{pmatrix}x \\y \end{pmatrix} A=(xy), A T = ( x , y ) \bf A^T = \begin{pmatrix}x,y \end{pmatrix} AT=(x,y)。
向量点积
向量点积: a ⃗ ⋅ b ⃗ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ cos θ \vec a \, · \, \vec b = \| \vec a \| \| \vec b \| \cos \theta a⋅b=∥a∥∥b∥cosθ, cos θ = a ⃗ ⋅ b ⃗ ∥ a ⃗ ∥ ∥ b ⃗ ∥ \cos \theta = \frac {\vec a \, · \, \vec b} {\| \vec a \| \| \vec b \|} cosθ=∥a∥∥b∥a⋅b。当两个向量都是单位向量时, cos θ = ∥ a ⃗ ∥ ∥ b ⃗ ∥ \cos \theta = \| \vec a \| \| \vec b \| cosθ=∥a∥∥b∥。
- 点积满足的运算性质:交换律、分配律、结合律。
- 在笛卡尔坐标系中,向量点乘结果为对应元素相加再求和。
- 点积在图形学中的作用:找到两个向量的夹角(如光线和平面之间)、一个向量到另一个向量的投影、对一个向量在另一个向量的方向上进行分析,根据点积结果数值判断两个向量是否接近(1)还是完全相反(-1)、方向是相同(>0)还是相反(<0)。
向量叉积
向量叉积:叉积得到的向量垂直于两向量,方向遵循右手定则。
∥
a
⃗
×
b
⃗
∥
=
∥
a
⃗
∥
∥
b
⃗
∥
sin
θ
\|\vec a \, × \, \vec b\| = \| \vec a \| \| \vec b \| \sin \theta
∥a×b∥=∥a∥∥b∥sinθ
叉积可以用于建立三维空间的直角坐标系。对于右手坐标系:
x
⃗
×
y
⃗
=
+
z
⃗
\vec x \, × \, \vec y =+ \vec z
x×y=+z(本课程默认右手系,opengl等api中会假设左手系)
- 叉积满足的运算性质:交换律方向相反: a ⃗ × b ⃗ = − b ⃗ × a ⃗ \vec a \, × \, \vec b = - \,\vec b \, × \, \vec a a×b=−b×a, a ⃗ × a ⃗ = 0 \vec a \, × \, \vec a = 0 a×a=0;分配律、结合律仍存在。
- 在笛卡尔坐标系中,叉积结果可以表示为 a ⃗ × b ⃗ = A ∗ b = ( 0 − z a y a z a 0 − x a − y a x a 0 ) ( x b y b z b ) \vec a × \vec b = A^*b=\begin{pmatrix}0 & -z_a & y_a \\ z_a & 0 & -x_a \\ -y_a & x_a & 0 \end{pmatrix} \begin{pmatrix}x_b \\ y_b \\ z_b \end{pmatrix} a×b=A∗b= 0za−ya−za0xaya−xa0 xbybzb ;其中 A ∗ A^* A∗ 称为 a ⃗ \vec a a 的dual matrix。
- 叉积在图形学中的作用:根据叉积结果>0/<0判定两向量之间的左/右关系;判断一个点是否在三角型内(光栅化的基础):三个顶点与该点连成的向量,与按逆(顺)时针方向连接三个顶点的向量对应叉积均>0(<0)。
标准正交坐标系(Orthonormal Bases / Coordinate Frames)
对于一组正交的单位向量基
u
⃗
,
v
⃗
,
w
⃗
\vec u, \vec v, \vec w
u,v,w,任意向量可以用它在三个基向量的投影与基向量相乘的方式分解:
p
⃗
=
(
p
⃗
⋅
u
⃗
)
u
⃗
+
(
p
⃗
⋅
v
⃗
)
v
⃗
+
(
p
⃗
⋅
w
⃗
)
w
⃗
\vec p = (\vec p \, · \, \vec u)\vec u + (\vec p \, · \, \vec v)\vec v + (\vec p \, · \, \vec w)\vec w
p=(p⋅u)u+(p⋅v)v+(p⋅w)w
矩阵
矩阵在图形学中主要被用于表示图形变换(transformations)。
矩阵乘积
- 运算性质:一般来说不满足交换律,满足结合律和分配律。
矩阵的转置、求逆
- ( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT; ( A B ) − 1 = B − 1 A − 1 (AB)^{-1}=B^{-1}A^{-1} (AB)−1=B−1A−1