前言
本篇主要对计算机图形学中变换的知识点进行总结,描述了2D变换、齐次坐标、组合变换、三维变换等的一些使用。同时,感谢令琪大佬的醍醐灌顶的授课。
图形学系列文章:
为什么要学习变换
- 可以用于建模
- 查看从3D世界到2D平面的投影变换
变换在动画,成像以及各方面都得到广泛的应用,这就是我们为什么要学习它。
2维变换
- 使用矩阵表示变换 (线性变换)
- 旋转、缩放、剪切
缩放变换
矩阵的写法形式:
反射变换
表示:
矩阵的写法形式:
剪切变换
提示:
- 水平位移在 y=0 处为 0
- 水平位移在 y=1 处为 a
- 垂直位移始终为 0
矩阵的写法形式:
旋转变换
默认是(0,0)点,顺时针旋转
旋转矩阵:(基于线性变换,相同的维度)
齐次坐标
平移变换场景:
平移不能以矩阵形式表示,只能是这样:
所以,平移不是线性变换
但我们不希望平移变换成为一个特殊的变换。
是否有一种统一的方式来表示所有的变换?
齐次坐标的解决方案
添加第三个坐标
平移变换
平移的矩阵表示:
如果结果的 w 坐标为 1 或 0 则有效操作
在齐次坐标中,
仿射变换
仿射变换 = 线性映射 + 变换
利用其次坐标
利用齐次坐标表示缩放旋转平移(2维)
就平移来说,用一个矩阵,可以把线性变换的部分(2x2),和平移这一部分都统一的写成矩阵的形式。
这样一来,我们用其次坐标,就可以各种不同的变换写成同一个。
统一的表示形式,而代价就是引入了额外的数字,任何一个点(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矩阵中为仿射变换:
在3维中表示变换:
围绕着x、y、z轴旋转拆解
围绕某一固定轴旋转:
- 绕这x轴旋转,y和z都是在旋转的。但是任意一个点,它的x是不变的。
- 绕z轴旋转,也是同上。
- 绕y轴旋转,因为是右手螺旋定则,所以是z叉乘x得到y,所以如图y的矩阵看起来是反的。
任意绕轴旋转:
- 分解为单一轴旋转;
- 常用于飞行模拟:滚转,俯仰,偏航 (roll, pitch, yaw)
rodrigues的旋转公式:
旋转角度 α 绕轴 n
围绕任意轴旋转,而这个轴的起点并不在原点,做法是把所有的东西都移动,使得这个轴的起点为原点,然后再旋转,然后再把所有的东西都移回去。
四元数、万像锁的概念待查。
矩阵转置
旋转负角度a,就是把角度a,做了一个转置。
旋转角度a和旋转负角度a,正好是一个互逆的操作。
数学上,一个矩阵的逆等于它的转置,这个矩阵为正交矩阵。
旋转矩阵里的逆,就等于旋转矩阵的转置。也就是说正交矩阵的转置等于正交矩阵的逆。