风过蔷薇

导航

 

本章主要介绍对于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

变换公式为

 

posted on 2017-01-20 17:52  风过蔷薇  阅读(300)  评论(0编辑  收藏  举报