opengl 約定 & 矩陣轉換規則

一。OPENGL約定

1.

void gluPerspective(
  GLdouble fovy,
  GLdouble aspect,
  GLdouble zNear,
  GLdouble zFar
);

  此函數生成透視投影矩陣並將此矩陣與當前矩陣相乘,設M爲當前矩陣,T爲透視投影矩陣,有:M=M*T。

   約定:此函數約定視點在座標原點,視向(視軸的方向)爲負Z方面,zNearzFar 約定爲正但卻是表示負Z方向。

 

二。矩陣轉換規則


   當有多個變換組合的時候,我們依次使用gltranslate, glrotate, glmultmatrix依次進行變換, 但發現變換組合卻和我們調用的變換次序相反,如:T11爲平移變換, T12爲旋轉變換,我們依次調用T11->T12, opengl轉換的順序爲T12->T11。

   如1。1所示,我們依次調用T11->T12,當前矩陣M應該是:M=M*M11 , M=M*M12,推出M= M*M11*M12, 按照DX的規則,變換次序應該爲T11->T12,但OG卻是相反。 

  結果從glMultMatrix 函數獲得啓發, 原來OG將變換矩陣轉置後才進行相乘。如下所示:

  設So爲原始座標, T1爲轉換矩陣,ST爲經T1轉換後的座標, OG的轉換應該是這樣計算的:ST = So* { T1^T }^T。(^T爲轉置符號)。如果是變換組合就成了So* { T1^T * T2^T * T3^T * ... }^T, 由於公式A^T^T = A; A^T * B^T = (B*A)^T,

得 ST=

    So* { T1^T * T2^T * T3^T * ... }^T =

    So* { ... * T3 * T2 * T1}^T^T =

    So* { ... * T3 * T2 * T1}

得出OG的變換順序和調用順序是相反的,所以應該特別注意。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章