1. 程式人生 > >計算機圖形學:基於3D遊戲開發——第二章 頂點處理機制

計算機圖形學:基於3D遊戲開發——第二章 頂點處理機制

渲染管線:頂點處理過程——光柵化過程——片元處理過程——輸出合併操作。

光柵化階段:根據頂點對多邊形加以整合,並將各個多邊形轉換為片元集合。片元定義為一組資料,並對顏色緩衝區中的畫素進行更行。

片元處理:對各個片元進行操作(如紋理操作),進而進行各種操作確定片元的顏色值。

輸出合併:片元與顏色緩衝區中的畫素進行比較或合併,進而更行畫素的顏色值。

頂點操作包括轉換操作、光照操作和動畫操作。本章主要探討頂點轉化操作,並介紹頂點光照方式。第5章討論頂點光照內容,第11章闡述頂點動畫方式。

2.1世界轉換

2.1.1仿射轉換和齊次座標

上圖中的世界轉換和視見轉換取決於各種基本轉換:縮放、旋轉、平移。

縮放和旋轉為線性轉換,線性轉換+平移操作統稱為仿射轉換

平移操作通過向量加法描述,但是使用齊次座標後能使用矩陣描述,所以縮放和旋轉也要使用其次座標下的矩陣形式

三維縮放矩陣——齊次座標縮放矩陣

2D旋轉矩陣——3D旋轉矩陣——齊次座標旋轉矩陣

齊次座標(x,y,z,w)對應於笛卡爾座標(x/w,y/w,z/w)。齊次座標的w項用於分辨向量和頂點資料,如果w為0,則(x,y,z,w)表示向量;否則表示頂點。

2.1.2世界矩陣

在右手座標系中,比如繞Y軸旋轉,箭頭指向觀察者,如果旋轉角度為+90,則為逆時針;-90,則為順時針。

旋轉矩陣和平移矩陣相乘得到對應的4 X 4世界矩陣。左上方3 X3 矩陣表示組合線性轉換,第四列表示組合平移操作。

2.1.3尤拉轉換

當物件繞X Y Z軸進行連續旋轉時,物件應具有確定方向。旋轉角θx、θy、θz稱為尤拉角。可以將3個旋轉操作整合為一個旋轉操作,該過程稱為尤拉轉換

R(z) * R(y) * R(x)相乘得到單一矩陣。

2.1.4表面法線的轉換

非均勻縮放操作會使法線轉換出問題。詳見圖2.8例子。

解決方法:使用M矩陣的逆矩陣的轉置矩陣來用於法線的轉換操作。

2.2視見轉換

世界轉換操作完畢且全部物件均定義於世界空間內。隨後可在世界空間內確定相機。

2.2.1相機空間

根據EYE、AT、UP三個引數來確定。(相當於拍照片時確定攝影師站立的位置,眼睛位置、模特位置、頭歪向的向量)

構建相機空間(u,v,n),n = (EYE-AT)/|EYE-AT|;u = (UP x n)/|UP x n|;v = n x u;

2.2.2空間轉換和視見矩陣

如果全部世界空間物件都重新定義於相機空間內,那麼渲染演算法的實現過程就會變得簡單。這個過程被稱為世界空間{O,e1,e2,e3}與相機空間{EYE,u,v,n}之間的空間轉換,並可通過視見轉換加以實現。

Mview = RT;

Opengl中gluLookAt用於建立視見矩陣。

2.3 逐頂點光照

源自光源的光線將通過物件表面進行反射並於隨後到達相機處。

2.4投影轉換

2.4.1視見體

場景中的可見區域稱為視見體

Fovy定義垂直方向的可見區域。

Aspect:寬高比

N:近剪裁面

F:遠剪裁面

近裁面和遠裁面不符合真是相機和人類視覺系統原理,其存在原因僅處於計算效率考量。

外部視見體物件不會對最終影象結果產生任何影響。如果在進入GPU管線之前丟棄此類物件,則可大大提升計算效能——視錐體剔除操作。

2.4.2 投影矩陣

投影轉換將金字塔視錐體轉換為軸對齊2 X 2 X 1的立方體視見體。

根據fovy、aspect、n、f四個引數可以確定一個投影矩陣

Opengl和direct3d有一點不同,就是Z軸前者(-1,1),後者(0,1).