变换的分类
变换的实现方式
- 变换坐标
- 变换坐标系
对比:各有利弊,比如有可能直接变换物体坐标计算量大,那么就可以使用变换坐标系代替。
常见的变换
注:非特殊说明变换空间均为左手坐标系。
平移
平移矩阵:
注:平移矩阵不是正交矩阵。
旋转
绕x轴旋转:
绕y轴旋转:
绕z轴旋转:
注:旋转矩阵是正交矩阵。
缩放
缩放矩阵:
注:
- 缩放矩阵一般不是正交矩阵。
- k = 0时,就是正交投影。
- k < 0时,就是镜像。
正交投影
正交投影矩阵(右手坐标系)
其中:
- Size:视锥体竖直方向上高度的一半。
- Aspect:摄像机的横纵比,即裁剪面的宽/高。
- Far:近裁剪面与摄像机的距离。
- Near:远裁剪面与摄像机的距离。
注:
- 在某个方向上用0做为缩放因子,就可以实现正交投影。
- 原来的点到投影点的直线相互平行。
- 如果矩阵行列式为0,则矩阵包含投影。
- 正交投影与正交矩阵没有关联。
视锥体示意图:
透视投影
透视投影矩阵(右手坐标系)
其中:
- FOV:Field of View的缩写,表示摄像机上下张开的角度大小。
- Aspect:摄像机的横纵比,即裁剪面的宽/高。
- Far:近裁剪面与摄像机的距离。
- Near:远裁剪面与摄像机的距离。
注:
- 透视投影中原来的点到投影点的直线相交于一点。
参考链接:
透视投影矩阵的推导:https://blog.csdn.net/u013244147/article/details/88760626
镜像(反射)
- 缩放因子小于0即可实现镜像
- 如果矩阵行列式为负,则矩阵包含镜像。
切变(扭曲)
定义:角度发生变换,但面积和体积保持不变。
表示x,y坐标被z坐标改变但保持面积和体积不变。s,t控制着变化的方向和量。
变换的组合
不同类型的变换顺序:
1. 先缩放,在旋转,最后平移。
使用列矩阵:
使用行矩阵:
2. 旋转的变换顺序:
当给定一个旋转角度时,Unity中世界坐标系的旋转顺序为,个体坐标系的旋转顺序为。
参考链接:https://blog.csdn.net/SailingTiger/article/details/78015856
常见问题
平移变换、正交变换、正交矩阵之间的关系
- 平移变换属于正交变换的一种,但平移矩阵不是正交矩阵。
- 正交变换矩阵不一定是正交矩阵,正交变换在任意一组标准正交基下的矩阵才是正交矩阵。
为什么先缩放,在旋转,最后平移?
变换一般出现在物体从一个坐标系向另一个坐标系转换的过程,坐标系转换就是变换的目的。比如在个人坐标系向世界坐标系转换的过程,首先要明白缩放、旋转和平移都是针对个体而言,在世界坐标系下进行的。此时物体的个人坐标系和世界坐标系重合:
- 如果先旋转后缩放,那么旋转后的个人坐标轴就不再与世界坐标轴重合,那么利用原先定义的缩放方向在此时进行缩放就会出错。比如原先定义的沿x轴缩放2倍,那么此时进行缩放2倍的物体部位就不再是我们想要缩放的物体部位(被旋转走了)了。
- 如果先平移,那么接下来的旋转和缩放就不再以原点为中心进行变换了,这不是我们想要的效果,我们想要的是原点进行缩放和旋转。