引言
最近打算重新温习一下 GAMES101 现代计算机图形学入门的课程内容,做一个总结与梳理比较重要的内容以便快速复习。
Review of Linear Algebra
Vector
Normalization
Addition
Multiplication
Dot Product
通过判断点乘的正负判断两个方向向量有多么接近:
dotProduct > 0 ? forward: backward; |
Cross Product
叉乘向量的方向用右手螺旋定则判断,类似于大拇指点赞。
叉乘没有交换律,但分配律和结合律依然存在。
叉积有两个作用:
判定左右(不经过逆/顺时针旋转保持方向一致)
判定内外(叉乘符号保持一致)
Matrix
Matrix-Matrix Multiplication
矩阵间的乘法规则为”前行乘后列”,算第几行第几列就去找左矩阵第几行和右矩阵第几列。
矩阵间的乘法不满足交换律,但满足结合律和分配律。
Transpose
矩阵转置就是把行列互换。
Identity Matrix
只有对角线上有非零元素的矩阵被称为对角阵,单位矩阵则都为 1。矩阵与矩阵的逆相乘得到单位矩阵。
Transformation
2D Transformation
Scale Matrix
Reflection Matrix
Shear Matrix
水平方向的切变。
Rotate Matrix
旋转默认原点为中心逆时针方向,推导过程如下:
Homogenous Coordinates
齐次坐标服务于平移变换,把二维的点增加一个纬度变成齐次坐标,所有变换形式上简化为一个矩阵乘以一个向量。
2D Transformation
Inverse Transformation
Composing Transforms
变换顺序从右到左非常重要,可以视作交换律的不可用。
旋转时的中心点始终为原点,所以保证旋转时物体在原点,之后再做其他的变换操作。
3D Transform
Scale & Translation
Rotation
$Z x X = Y$
推导过程如下:
Viewing Transform
View/Camera Transform
相机身处原点,法向为 Y,朝向为 -Z 的标准位置。
Model Transform
视图矩阵需要先平移至原点,然后一次旋转到标准轴。
齐次坐标先做平移后做旋转。
虽然任意轴旋转到标准轴很难推导,但是这个逆过程标准轴旋转到任意方向还算简单,又因为旋转矩阵的逆矩阵与转置矩阵相等最后可以推导出来。
Projection Transform
透视投影(P)会有近大远小的现象,而正交投影(O)没有。
Orthographic Projection
- 相机从原点看向 -Z 方向,头顶朝向 Y 方向
- 扔掉 Z 轴
- 缩放变换 X、Y 至 [-1, 1]
首先把立方体中心从负方向移到原点,然后再做一个缩放把长度变为 2。
Perspective Projection
透视投影可以拆分为两步:首先将 Frustum 挤成 Cuboid;然后直接用正交投影。
使用 (0,0,n) 和 (0,0,f) 两个特殊点代入,就可以得出最终的矩阵
Viewport Transform
- 长宽比:aspect ratio
- 垂直可视角度:fovY(field-of-view)
Rasterization
Screen Space
- 像素 (x, y) 的中心为 (x + 0.5, y + 0.5)。
- 以左下角为原点,屏幕的像素空间从 (0, 0) 到 (width - 1, height - 1)。