本章主要介绍对于real-time graphics非常重要的矩阵变换和操作
欧拉变换
欧拉变换是构建使你自己(即相机)或者任何其他实体朝向某个方向的矩阵变换的最直观方式。
首先必须确立默认的view direction.欧拉变换是三个矩阵的乘积,即如图所示的旋转。
由于E是一连串的旋转,所以它也是正交的。所以它的逆矩阵就是
欧拉角h,p,r代表head,pitch,roll的旋转角度和顺序。如,改变head的角度会使viewer摇脑袋说no,改变pitch会使它点头,rolling会使他的头斜向一边。
使用欧拉变换时,可能会发生 gimbal lock(万向节锁)。万向节锁是指物体的两个旋转轴指向同一个方向。实际上,当两个旋转轴平行时,我们就说万向节锁现象发生了,换句话说,绕一个轴旋转可能会覆盖住另一个轴的旋转,从而失去一维自由度 欧拉角有一些限制。两个欧拉角很难结合在一起工作,如欧拉角插值不适合用来表示旋转插值(等角速度)。可以使用四元数插值来代替。
从欧拉变换中提取参数
从正交矩阵中提取欧拉参数h,p,r。
特殊情况,cosp=0时,f01=f11=0,不能用atan2函数
矩阵分解
矩阵分解的使用场合:
1. 从一个object中提取scaling factors
2. 特殊系统需要找到变换矩阵
3. 确定某个model是否只经过了rigid-body变换
4. 当只有object矩阵提供时,在动画中关键帧的插值
5. 从旋转矩阵中去除shears
绕任意轴旋转
变换过程:先找到和r互相垂直的两个轴,作为basis,然后将base从standard basis变换到一个新的basis,再绕x轴(r)旋转 a 弧度,最后再变换回standard basis
变换公式为