2010年11月7日 星期日

OpenGL裡的矩陣使用

OpenGL裡matrix的應用非常重要,了解其用法卻實有助了解繪圖原理。

以下為物件轉成影瑩幕坐標的過程

1. Modelview Matrix 表示物件轉換後的眼睛坐標(eye coordinate),亦即當我現在給予一個點坐標a, 此坐標在眼睛坐標上為 e = Ma。

2. 而 Projection Matrix 則為將眼坐標轉成投影坐標(如垂直投影或透視投影)。如 j=Pe。

3. j=[x,y,z,w],將x、y、z各除上w,得到正規設備坐標(Normalized device coordinate),n=[x',y',z']。

4. Viewport transformation 為將n轉成影瑩幕坐標的矩陣,其瑩幕點 p = Vn。

因此一個物件的轉換需經過許多矩陣才能得到相對應的瑩幕上的點。

因些當我們要繪製上臂,手肘和手掌時,可以先將前矩陣存入stack,再把矩陣轉移到上臂的矩陣,然後開始繪至上臂。接著再將矩陣轉移至手肘的位置,以繪製手肘。之後再把矩陣轉移至手掌位置,便開始繪製。最後再將stack pop出來就可以回來原來的位置了。

透過距陣繪圖的好處是可以簡少計算物體位置的複雜度。

而相機坐標其實也可以視為是一種矩陣轉換。

因此,若我們要繪裝一個小型的動畫,可以考慮如下步驟:


1 儲存I矩陣
2 套用相機轉換矩陣
3 繪製不移動的物件
4 繪製移動物件
4.1 儲存當前矩陣
4.2 套用物件的矩陣
4.3 繪裝物件的點
4.4 取回矩陣
5 取回IV


但是在OpenGL Super Bible裡的例題裡,每一次rander都要跑如此多的次數,造成才繪製幾個物件其資源就花費極大。或許之後可以看到些更好的方法。

沒有留言:

張貼留言