计算机图形与OpenGL学习七(三维几何变换2.一般三维旋转)

一般三维旋转

对于绕与坐标轴不一致的轴进行旋转的变换矩阵,可以利用平移与坐标轴旋转的复合而得到。首先将指定旋转轴经移动和旋转变换到坐标轴之一,然后对该坐标轴应用适当的旋转矩阵。最后将旋转轴变回到原来位置。

在某些特殊情况下,例如将对象绕平行于某坐标轴的轴旋转、可以通过下列变换顺序来得到所需的旋转矩阵:

         i.           平移对象使其旋转轴与平行于该轴的一个坐标轴重合;

        ii.           绕该坐标轴完成指定的旋转

      iii.           平移对象将其旋转轴移回到原来的位置。

此变换的矩阵表示为:

如果对象绕与每个坐标轴均不平行的轴旋转,则需要进行额外的变换。此时,还需要进行使旋转轴与某一选定坐标轴对其的旋转,以后要将此轴变回到原始位置。若给定旋转轴和旋转角,我们可以按照5个步骤来完成所需旋转:

         i.           平移对象,使旋转轴通过坐标原点;

        ii.           旋转对象是的旋转轴与某一坐标轴重合;

      iii.           绕该坐标轴完成指定的旋转

      iv.           利用逆旋转使旋转轴回到其原始方向;

        v.           利用逆变换使坐标轴回到其原始位置。

任意旋转轴可以由两个坐标点确定,或通过一个坐标点和旋转轴与两个坐标轴件的方向角来确定,利用两点坐标定义的轴向量为:


沿旋转轴的单位向量u则定义为:

第一步的操作,是使旋转轴通过坐标原点,我们平移P1到坐标原点,平移矩阵是:

第二步的操作是,将旋转轴与坐标轴重合(取z轴)。利用两次坐标轴旋转来完成这一对齐。有多种方法可以完成,我们可以首先绕x轴旋转(将向量u变换到xz平面),再绕y轴旋转(将u变到z轴上)。

首先,我们要计算使u变换到xz平面的旋转角的正弦和余弦值,可以建立绕x轴旋转的变换矩阵。改选转交是u在yz平面上的投影与z轴正弦的夹角,如图1。

图1将向量u变换到xz平面

要计算α的正弦值,可以计算u’和uz的叉积,其形式为:



由于已使用向量u的分量来得出cosα和sinα的值,因此可以建立绕x轴将u旋转到xz平面的旋转矩阵(若看不懂,请看上一节绕坐标轴旋转的推导):

下一步,需要将xz平面上的单位矩阵,绕y轴旋转到z轴的正方向。如图2。

图2将向量u’’变换到z轴上

同样,按照上述的变换方式,需求得β的正弦余弦值。

绕y轴后的变换形式为:

 

现在我们已经将旋转轴对其到z轴的正方向,给定的旋转角θ就可以用关于z轴的旋转:

最后还需要将旋转轴变回到原来的位置,即进行逆变换,可以定义这一系列的操作为一个复合矩阵。

至此,变换结束,在下一节中,我们将在OpenGL中实现变换。

猜你喜欢

转载自blog.csdn.net/lhs322/article/details/80066360