前言
本篇主要对计算机图形学中变换的知识点进行总结,描述了2D变换、齐次坐标、组合变换、三维变换等的一些使用。同时,感谢令琪大佬的醍醐灌顶的授课。
为什么要学习变换
- 可以用于建模
- 查看从3D世界到2D平面的投影变换
变换在动画,成像以及各方面都得到广泛的应用,这就是我们为什么要学习它。
2维变换
- 使用矩阵表示变换 (线性变换)
- 旋转、缩放、剪切
缩放变换
矩阵的写法形式:
反射变换
表示:
矩阵的写法形式:
剪切变换
提示:
- 水平位移在 y=0 处为 0
- 水平位移在 y=1 处为 a
- 垂直位移始终为 0
矩阵的写法形式:
旋转变换
默认是(0,0)点,顺时针旋转
旋转矩阵:(基于线性变换,相同的维度)
齐次坐标
平移变换场景:
平移不能以矩阵形式表示,只能是这样:
所以,平移不是线性变换
但我们不希望平移变换成为一个特殊的变换。
是否有一种统一的方式来表示所有的变换?
齐次坐标的解决方案
添加第三个坐标
平移变换
平移的矩阵表示:
如果结果的 w 坐标为 1 或 0 则有效操作
在齐次坐标中,
仿射变换
仿射变换 = 线性映射 + 变换
利用其次坐标
利用齐次坐标表示缩放旋转平移(2维)
就平移来说,用一个矩阵,可以把线性变换的部分(2×2),和平移这一部分都统一的写成矩阵的形式。
这样一来,我们用其次坐标,就可以各种不同的变换写成同一个。
统一的表示形式,而代价就是引入了额外的数字,任何一个点(x,y)都写成了(x,y,1)。任何一个向量(x,y)都写成了(x,y,0)。
逆变换
就是把一个变换的操作反过来,就是逆变换。
是矩阵和几何意义上的变换的逆矩阵。
变换组合
变换顺序问题
不同的变换顺序,影响结果。
方案一:
先平移,后旋转
方案二:
先旋转,后平移
顺序不一样,得到的结果也不一样。
同理,矩阵乘的顺序不一样,结果不一样。
推导得出,矩阵不满足交换律。
向量乘以一个矩阵,矩阵应该放在左边,注意矩阵从右到左应用(从右向左乘)
组合公式
如仿射变换序列 A1, A2, A3, …
• 通过矩阵乘法
• 对性能非常重要!
分解复杂的变换
如何围绕给定点 c 旋转?
- 将中心平移到原点
- 旋转
- 平移返回
矩阵表示:
3维变换
再次使用齐次坐标表示:
同样的道理,定义(x,y,z,w),只要w !=0, 就表示是一个点。
只有w = 1的情况下, 表示一个就是3维的点。
如果w != 1, w != 0,这个这时 想x,y,z同时除以w, 就变成w = 1的情况了。
(x/w, y/w, z/w)
使用4×4矩阵中为仿射变换: