2011-01-27 130 views
0

所以我正在學習OpenGL作爲擁有「紅皮書」的主要資源。我正在閱讀矩陣代數,旋轉/縮放/變換矩陣,一切都很好,但我只是沒有得到一個簡單的東西。我們說glLoadIdentity()函數。它設置4x4的默認矩陣。因此它設置3個頂點和1個點:(1,0,0)(0,1,0)(0,0,1)頂點,(0,0,0)點。但我的問題是,這些對應的是什麼?一般來說,OpenGL中矩陣對應的是什麼?我知道這些是軸子的方向。但是什麼的軸心?相機?OpenGL中的矩陣

回答

5

OpenGL矩陣只對應於一個變換,將一個座標空間中定義的對象,矢量和點移動到另一個座標空間。如果在一個座標空間中有一個矩陣M(m11 - m44,如下所示)和一個矢量V(v1 - v4),那麼乘以M將轉換您的V矢量(可以描述運動矢量,物體位置或物體頂點)到W(W1-W4)在不同的座標空間:

| m11 m12 m13 m14 | | v1 |  | w1 | 
| m21 m22 m23 m24 | | v2 |  | w2 | 
| m31 m32 m33 m34 | X | v3 | = | w3 | 
| m41 m42 m43 m44 | | v4 |  | w4 | 

其中:

w1 = m11 * v1 + m12 * v2 + m13 * v3 + m14 * v4 
w2 = m21 * v1 + m22 * v2 + m23 * v3 + m24 * v4 
w3 = m31 * v1 + m32 * v2 + m33 * v3 + m34 * v4 
w4 = m41 * v1 + m42 * v2 + m43 * v3 + m44 * v4 

因此,如果我們認爲V1的 - V3作爲老X,Y和Z座標,並設置V4到1,那麼我們可以將w1 - w3看作新的x,y和z座標,我們可以看到幾件事情:
m11是舊x座標到新座標的乘數因此它在比例變換用(以及類似地對於M22和M33)
M14乘以1並添加到新的x座標,以便它被用於轉換(並且類似地對於M24和M34)

旋轉是有點困難進行概念化,但通過將其他矩陣值設置爲適當的值來完成。你可以在這裏閱讀更多:http://gpwiki.org/index.php/Matrix_math

+1

哦,所以通過調用glLoadIdentity()我們只是將矩陣重置爲一個(單位矩陣),這與矢量的多重性將導致相同的向量?換句話說,不會以任何方式影響對象?我們這樣做是因爲draw函數使用當前加載的矩陣繪製對象?我理解它嗎? – Asido 2011-01-27 09:59:45

0

默認矩陣僅僅是單位矩陣:

/1 0 0 0\ 
|0 1 0 0| 
|0 0 1 0| 
\0 0 0 1/ 

在更一般的情況下(不考慮角度和其他可能的異國變換)...

/a d g j\ 
|b e h k| 
|c f i l| 
\0 0 0 1/ 

...轉換後的座標系的組成如下:

  /a\ 
X-axis = |b| 
     \c/ 

     /d\ 
Y-axis = |e| 
     \f/ 


     /g\ 
Z-axis = |h| 
     \i/ 

     /j\ 
Origin = |k| 
     \l/ 

如果您將這些關聯到單位矩陣,您可以看到「3個頂點和1個點」來自哪裏。

除了單位矩陣,這適用於任何變換 - 旋轉,平移等 - 保持底行在(0 0 0 1),並提供了一種簡單的方法來可視化這種變換。簡單地將上面的四個分量看作代表軸(1 0 0),(0 1 0),(0 0 1)和原點(0 0 0)在由矩陣轉換後最終結束的四個分量(記住軸不是絕對的,而是相對於原點)。