Transformation
Transformation
1. 2D变换
1.1 缩放(scaling)
1.2 镜像变换
1.3 切变(Shear Matrix)
如下图,变换过程中y坐标始终不变
1.4 旋转(Rotate)
1.5 齐次坐标
平移:
为了表示平移操作引入了第三维坐标:
注:point+point的结果为两个点的中点
仿射变换的两种形式:
注:齐次坐标变换矩阵中的a,b,c,d与线性变换中的变换矩阵是对应的
1.6 逆变换
逆变换:变换矩阵为原变换的逆矩阵
2. 3D变换
2.1 仿射变换
注:该表示方法是先做线性变换,然后再平移
2.2 旋转
- 在轴上
一般的旋转:可以将任意的旋转分为在三个轴上的旋转,其中在三个轴上的旋转角度称为欧拉角
罗德里格斯公式(Rodrigues’ Rotation Formula):
注:四元数的应用
2.3 视图/相机变换(View / Camera Transformation)
相机的参数:初始位置、观看角度(向量)、竖直角度(向量)
标准化:观看位置为原点、观看角度为-Z、向上方向为Y
变换的方法:
由于正向变换比较复杂,考虑通过其逆矩阵来实现:R为旋转变换矩阵、T为平移变换矩阵、M为整个过程的变换矩阵
注:旋转矩阵为正交矩阵,逆矩阵即是其转置
注:视图变换变换的是相机,其他的物体随着相机一起变换
3 投影变换
3.1 正交投影变换
正交投影变换:平移+压缩
注:l,r为x轴上的距离,b,t为y轴上的距离
3.2 透视投影变换
透视投影类似人眼所看东西的方式,遵循近大远小,平行线也会变得不平行
用正交变换表示透视投影变换:
将透视变换压成投影
注:其中n是近平面,f是远平面,在公式推导的过程中是默认n、f均为负数
因而透视投影矩阵为:
又当投影接口的参数是张角fov,横纵比为aspect,近平面到原点的距离为near,远平面到原点的距离为far
由于长方体视窗体是轴对称,故有l=−r,b=−t,从原点看向−z方向看去,有n=−near,f=−far
所以透视投影矩阵可化简为:
4.视口变换
视口变换用于将标准平面映射到屏幕的分辨率范围之内(缩放+平移),变换矩阵如下:
5.总结
将虚拟世界中以(x,y,z)为坐标的物体变换到以一个个像素位置(x,y) 来表示的屏幕坐标系之中(2维)的步骤:
- 模型变换(modeling tranformation):这一步的目的是将虚拟世界中或者更具体点,游戏场景中的物体调整至他们应该在的位置
- 摄像机变换(camera tranformation):在游戏中我们真正在乎的是摄像机(或者说眼睛)所看到的东西,也就是需要得到物体与摄像机的相对位置
- 投影变换(projection tranformation):根据摄像机变换得到了所有可视范围内的物体对于摄像机的相对位置坐标(x,y,z)之后,便是根据是平行投影还是透视投影,将三维空间投影至标准二维平面([-1,1]^2)之上 (tips:这里的z并没有丢掉,为了之后的遮挡关系检测)
- 视口变换(viewport transformation):将处于标准平面映射到屏幕分辨率范围之内,即[-1,1]^2→[0,width]*[0,height], 其中width和height指屏幕分辨率大小