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都要跑如此多的次數,造成才繪製幾個物件其資源就花費極大。或許之後可以看到些更好的方法。
2010年11月7日 星期日
2010年11月4日 星期四
MBP睡眠也會發熱…
最近發現一件非常不尋常的事,而且我以前竟然沒有注意到。
為了省電,我的MBP都是使用hibernate來睡眠的,也就是說,記憶體的資料存放在硬碟上的休眠。理論上相較於sleep,應該是不會耗電才是。但我發現,插著電源的MBP睡眠後,隔了一段時候機子竟然是溫熱的。這頗讓我驚訝的,印象中以前是不會這樣的。
但是如果把插頭拔掉再睡眠,就再有發熱的情況了。但我仍發現開機時,電池落至98%,難不成當我插著電源睡眠時,我的MBP在充電?真的是太怪了,他如果要充電我也不介意,但沒記錯的話,90%之後的充電都應該是緩慢的才是,也不至產生如些多的熱吧。
另外也發現一件事,我有使用延伸瑩幕,有時候當MBP從睡眠中起來時,我發現MBP的瑩幕竟然不見了,轉而是廷伸瑩幕成了主瑩幕。或許我該清清開機快取設定也不一定。
希望電池不要膨脹,要膨脹也請在保固內呀!
訂閱:
意見 (Atom)