1. 程式人生 > >計算機圖形與OpenGL學習七(三維幾何變換2.一般三維旋轉)

計算機圖形與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中實現變換。