GAMES101 Lecture 3 Transformation
这里回顾GAMES101 Lecture 3,变换。
课程主页:
课程作业:
课程视频:
为什么学习变换
模型变换(modeling)
常见的例子有旋转和伸缩。
视图变换(viewing)
从3D到2D的投影:
2D变换
矩阵表示
很容易将常见的2D变换利用矩阵表示。
伸缩变换
反射变换
Shear矩阵(变换)
旋转
小结
线性变换等价于矩阵操作,一般的形式为:
齐次坐标
引子
之前提到,线性变换等价于矩阵变换,那么什么操作不是线性变换呢,一个常见的例子是平移变换:
其矩阵表示为:
更一般的,如下形式的仿射变换都不是线性变换:
那么是否有一个统一的方式表示仿射变换呢?回答是肯定的,答案就是齐次坐标。
基本概念
齐次坐标的思路是增加一个左边:
- 对于2D point,利用$(x, y,1)^T$表示;
- 对于2D vector,利用$(x,y,0)^T$表示;
那么平移变换可以在齐次坐标下表示为:
讨论
在齐次坐标下,有如下等式成立:
- vector + vector = vector;
- point - point = vector;
- point + vector = point;
- point + point = 两点的中点;
- 利用性质$(x, y, w)=(x/w, y/w, 1)$;
2D变换的齐次坐标表示
仿射:
伸缩:
旋转:
平移:
逆变换
对于变换(矩阵)$\mathbf M$,引入逆变换(矩阵)$\mathbf M^{-1}$,图示如下:
复合变换
对于更复杂的变换,可以使用复合变换,例如:
可以先平移再旋转:
也可以先旋转再平移:
注意变换顺序是有影响的,即:
这是因为变换对应了矩阵,复合变换对应了矩阵乘法,而矩阵乘法是没有交换律的。
对于一般的复合变换,可以将其分解为一系列仿射变换$A_1,A_2,\ldots,A_n$,那么复合变换为:
例子
对于绕着点$c$旋转的变换,可以用如下方式得到:
- 将旋转中心平移到原点;
- 旋转;
- 将旋转中心平移回去;
图示如下:
变换如下:
3D变换
对于3D变换,依然使用其次坐标:
- 对于3D point,利用$(x, y,z,1)^T$表示;
- 对于3D vector,利用$(x,y,z,0)^T$表示;
- 通常其次坐标$(x,y,z, w)$对应于点$(x/w, y/w, z/w)$;
仿射变换的矩阵形式为:
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Doraemonzzz!
评论
ValineLivere