一 图形学概述
1. 什么是图形学
图形学(计算机图形学)是研究如何利用计算机对图形和图像进行生成、表示、处理与显示的一门学科,主要关注将抽象的数据或数学模型转化为直观可视的二维或三维图像。
它融合了数学、物理、计算机科学和工程技术,核心内容包括几何建模、图形变换、光照与材质、渲染算法以及图像处理等。
图形学广泛应用于游戏与动画、虚拟现实与增强现实、计算机辅助设计(CAD)、科学可视化和影视特效等领域,在提升信息表达效率和视觉真实感方面发挥着重要作用。
2. 为什么学习图形学
创建并交互于逼真的虚拟世界
需要理解物理世界的各个方面
新的计算方法, 显示技术和技术
3. 主要学习内容
光栅化
曲线和曲面几何
光线追踪
动画/模拟/仿真
二 图形学的依赖学科
- 线性代数, 微积分, 统计
- 光学, 力学
- 信号处理, 数值分析
- 艺术美感
三 线性代数
1. 向量 vector
方向与长度
单位向量
向量求和, 平行四边形法则, 三角形法则
直角坐标系:
因为在直角坐标系中计算两个向量的和比较方便, 对(x²+y²)开方.
图形学中, 默认认为一个向量是"列向量", 垂直方向.
向量转置, 垂直变为"横向量".
向量乘法:
(1) 点乘 ·
点乘的结果是一个数值
→a · →b = |a| * |b| * cosθ
cosθ = (→a · →b) / ( |a| * |b| )
点乘的用途:
1. 给定两个向量就可以求出夹角的余弦值, 进而算出夹角.
特别的, 当两个向量都是单位向量时, 有:
cosθ = →a · →b
2. 判断两个向量是接近还是远离
点乘结果:
接近 1: 逐渐接近
接近 0: 接近垂直
接近-1: 逐渐远离
3. 给定一个向量a, 以半圆划分面前和背后, 判断其他向量与a的方向是相同还是不同.
点乘结果:
正数: 方向一致, 向前
负数: 方向不同, 向后
0: 在前后交界处, 垂直
二维:
→a · →b = (xa, ya) * (xb, yb) = xa*xb + ya*yb
三维:
→a · →b = (xa, ya, za) * (xb, yb, zb) = xa*xb + ya*yb + za*zb
投影计算:
向量a和b的夹角为θ, 计算→b在→a上的投影
由于向量b与b的投影构成直角三角形, 向量b是斜边, b投影为θ角的临边, 有:
cosθ = b投影 / |b|
则:
b投影 = |b| * cosθ
投影计算的用途:
可以把向量b分解为2个向量, 其中一个是b投影, 另一个是垂直于b投影的向量,
那么这个向量可以通过 (→b - b投影) 得到.
(2) 叉乘 ×
叉乘的结果是向量, 既有长度, 也有方向.
右手坐标系
通过x轴与y轴叉乘可以得到垂直于它们两个的z轴.
叉乘不满足交换律, 因为结果的方向相反.
x × y = +z
y × x = -z
x × x = 0
代数表示:
a × b = (ya*zb - yb*za)
(za*xb - xa*zb)
(xa*yb - ya*xb)
向量的叉乘也可以用矩阵表示.
把向量写成矩阵的形式,
叉乘的用途:
1. 判定左或右
2. 判定一个点在三角形的内或外
如果点在三条边的向量的同侧, 则点在内部
在光栅化时, 需要判断像素是否在三角形内侧, 内侧则着色.
2. 矩阵
(1)矩阵与矩阵相乘
首先两个矩阵是满足相乘的条件: 计算(M × P), 那么
(M)的"列数" = (P)的"行数"
(M × N)(N × P) = (M × P)
(M): 3 × 2 矩阵
[1,3]
[5,2]
[0,4]
(P ): 2 × 4 矩阵
[3,6,9,4]
[2,7,8,3]
(M × P): = 3 × 4 矩阵
[(1,3)·(3,2), (1,3)·(6,7), (1,3)·(9,8), (1,3)·(4,3)]
[(5,2)·(3,2), (5,2)·(6,7), (5,2)·(9,8), (5,2)·(4,3)]
[(0,4)·(3,2), (0,4)·(6,7), (0,4)·(9,8), (0,4)·(4,3)]
=
[ 9, 27, 33, 13]
[19, 44, 61, 26]
[ 8, 28, 32, 12]
计算技巧:
例如想计算结果矩阵中, 位于 第2行, 第4列 的值,
从(M)中找到第2行: (5,2)
从(P)中找到第4列: (4,3)
计算点积: (5,2)·(4,3) = 5*4 + 2*3 = 26
运算性质: 交换律不行, 结合律可以
1. 通常情况下, AB ≠ BA
2. (AB)C = A(BC)
3. A(B+C) = AB + AC
4. (A+B)C = AC + BC
(2) 矩阵与向量相乘
矩阵在左边, 向量在右边, 向量永远都是列向量 (M × 1)
2D变换:
按y轴做对称:
[-1, 0]
[ 0, 1]
×
[x]
[y]
=
[-x]
[y]
(3) 矩阵转置 (AT)
转置操作:
[1,2]
[3,4]
[5,6]
T
[1,3,5]
[2,4,6]
运算性质:
(A × B)T = BT × AT
(4) 单位矩阵 (I)
对角矩阵, 从左上->右下, 对角线上的值都不是0的矩阵.
对角线上的值都为1的矩阵是单位矩阵.
例如:
[1, 0, 0]
[0, 1, 0]
[0, 0, 1]
(5) 矩阵的逆, 互逆矩阵 (A-1)
如果能找到一个矩阵, 和原来的矩阵相乘, 得到的矩阵是一个单位矩阵, 那么这两个矩阵就是互逆矩阵,
运算性质:
-1表示矩阵的逆
A × A-1 = A-1 × A = I
(AB)-1 = B-1 × A-1
3. 向量乘法转换为矩阵表示
(1) 向量点乘
向量默认为垂直方向.
a · b = (aT) × (b)
=
[xb]
[xa, ya, za] × [yb] = [xaxb, yayb, zazb]
[zb]
(2) 向量叉乘
a × b = (A*) × (b)
=
[0, -za, ya] [xb]
[za, 0, -xa] × [yb]
[-ya, xa, 0] [zb]