GAMES101 学习笔记03:变换
两类变换
- Modeling
- Viewing
2D 变换
线性变换 = 矩阵 同维矩阵
缩放矩阵(Scal Matrix)
反射矩阵(Reflection Matrix)
剪切矩阵(Shear Matrix)
旋转矩阵(Rotation Matrix)关于原点,默认逆时针
TIP
对于顺时针旋转:
不难看出:
齐次坐标与平移变换(Homogeneous coordinates and Translation)
平移变换(Translation)
与上述所有变换不同,所以平移变换不是线性变换。
齐次坐标(Homogeneous coordinates)
作为一个解决办法,统一所有变换。
通过增加一维(
INFO
向量中增加的
对于:
在齐次坐标系下:
是 2D 点:
即两个点的中点。
平移的矩阵表示:
仿射变换(Affine Transformations)
上述变换的总称
所有的仿射变换:
都可以写成齐次坐标的形式:
用一个矩阵统一了所有变换
INFO
注意,这里是先应用线性变换,再进行平移。3D 下同理。
INFO
缩放:
旋转:
平移:
其他变换
逆变换(Inverse Transform)
组合变换(Composing Transforms)
组合变换的顺序很重要!因为矩阵乘法不能交换。
WARNING
注意矩阵是从右到左应用的:
虽然矩阵乘法没有交换律,但是有结合律。这就意味着可以做预乘,得到一个矩阵后再变换,优化性能。
分解复杂变换
如何围绕任意定点
- 将
平移至原点 - 旋转
- 将
平移回去
3D 变换
同样:
也就是 3D 点:
3D 仿射变换
INFO
与 2D 仿射变换相同,是先应用线性变换,再进行平移。
INFO
缩放:
平移:
3D 旋转变换
旋转(关于
被称为欧拉角。
Rodrigues’ Rotation 公式
将围绕任意轴
旋转 进行分解,得到围绕 旋转的矩阵 。
默认轴
过原点。
INFO
此处的矩阵
观测变换(Viewing transformation)
视图/摄像机变换(View/Camera transformation)
定义一个摄像机:
- 位置(Position)
- 目光方向(Gaze direction)
- 向上方向(Up direction)
当相机与物体一同运动(没有相对运动),「相片」是相同的:
因此,我们总是把相机放在原点(向上方向为 y,目光方向为 -z),并随着相机变换物体:
对于一个位于
- 将
移动到原点 - 将
旋转到 -z - 将
旋转到 y - 将
旋转到 x
对于一个矩阵
WARNING
因为齐次坐标是「先线性变换,再平移变换」,与我们所需要的效果相反,所以此处将
其中
而
INFO
- 将
旋转到 -z - 将
旋转到 y - 将
旋转到 x
TIP
将轴旋转到
进而可以得到
视图/摄像机变换也被成为模型视图(ModelView)变换,它将应用于后面提到的透视投影
投影变换(Projection transformation)
投影:3D 到 2D 的过程
正交投影(Orthographic projection)
一种简单的理解:
- 摄像机位于原点,朝向 -z,向上方向为 y
- 丢弃 z 坐标
- 得到的图形平移缩放至矩形
图形学上正式的做法:
- 定义一个空间上的立方体
,将其映射到一个空间上的标准立方体 。 - 过程(与简单理解中丢弃 z 的做法不同):
- 平移到原点
- 缩放至标准立方体
变换矩阵:
受限平移到原点,然后缩放(长宽高为2)
TIP
- 因为目光方向为 -z,所以近大于远(n > f)
- 这是就是为什么类似 OpenGL 等图形 API 使用左手系的原因。
透视投影(Perspective projection)
TIP
回顾一下齐次坐标:
与
表示的是同一个点,那么自然
表示的也是同一个点。
透视投影过程:
- 将 Frustum 挤压成长方体(n->n, f->f,
) - 进行正交投影
WARNING
这里与之前接触的图形学内容不太一样,闫老师的解读是将一个透视投影的空间挤压成立方体,然后进行正交投影,得到透视投影的 2D 图像。
找到一个变换关系:
这实际上是一个相似三角形
对于 x 和 y,皆有这一关系,在其次坐标下有:
因此,我们可以找到这个变换矩阵的一部分:
INFO
对于第三行的确定,我们可以立下几点规定:
- 近平面上的点永远不变
- 远平面上的点 z 值不变
- 远平面中心点位置不变
因此对于近平面,用 n 代替 z,可以得到:
因此我们知道
与 无关。
但这还不够,我们还要考虑远平面。远平面中心点永远不变,因此有:
同样可以知道
于是得到方程组:
解出结果:
至此,得到:
接下来只需要再进行正交投影即可,即:
近平面的定义
- 明确指定宽高
- 给定垂直视野和纵横比(对于对称的情况:
, )
纵横比到