3D圖形芯片的算法原理是什么樣的?
4.屏幕坐標系(屏幕空間)
屏幕空間是比較難于靠直覺(jué)理解的一種空間概念。它是描述如何觀(guān)察場(chǎng)景的方法的過(guò)程,與透視幾何有關(guān),也可以理解為怎樣定義場(chǎng)景中能夠到達眼睛(或相機)的光線(xiàn)的過(guò)程。將場(chǎng)景中的一個(gè)點(diǎn)投影到距離視點(diǎn)為D的觀(guān)察平面或屏幕要用到的基本變換是透視變換,屏幕或觀(guān)察平面的法向與觀(guān)察方向一致。從圖4可以看到,運用相似三角形原理,點(diǎn)P在屏幕上的投影P’(Xs= Dxe/Ze, ys=Dye/Ze)。屏幕與觀(guān)察平面略有不同,屏幕是觀(guān)察平面上的一塊矩形區域,在經(jīng)過(guò)一個(gè)與設備有關(guān)的變換之后,可以從觀(guān)察平面坐標求得屏幕坐標。屏幕空間的定義使得其只對一個(gè)封閉空間中所包圍的場(chǎng)景進(jìn)行繪制處理,這個(gè)封閉的空間稱(chēng)作視錐臺。它可以這樣來(lái)描述:設想在距離視點(diǎn)D處的觀(guān)察平面上有一尺寸為2h的正方形窗口,且該窗口關(guān)于觀(guān)察方向是對稱(chēng)的,則平面
xe=±hze/D ye=±hze/D
ze=D ze=F
將構成一個(gè)封閉的錐臺。其中xe、ye 、ze是指眼睛坐標系中的坐標,而平面ze=D和平面ze=F分別稱(chēng)作近處和遠處的裁剪平面,它們垂直于觀(guān)察方向,在此我們假設觀(guān)察平面與近處的裁剪平面重合。如圖4所示。對于透視投影而言,通過(guò)連接窗口角與投影中心就形成所謂的視錐體。
有了這個(gè)視錐體,就可以用它對已變換到眼睛坐標系下的場(chǎng)景進(jìn)行選擇。這不外有三種情況,對于那些完全落在視椎臺之內的物體,直接通過(guò)透視變換將其變換到屏幕坐標系下;對于那些完全落在視椎臺之外的物體不作進(jìn)一步的處理而直接拋棄;對于那些與視椎臺的面相交的物體則應作裁剪處理,裁取其位于錐臺內的部分并用透視變換將它們變換到屏幕坐標系下。在屏幕坐標系下,Z坐標將作為判斷物體面之間相互遮擋的唯一判據。
注意,場(chǎng)景中的每個(gè)物體的每個(gè)三角形都要經(jīng)過(guò)以上處理過(guò)程。
四、象素處理
經(jīng)過(guò)以上一系列的變換之后,一個(gè)多邊形已變換到屏幕坐標系下。將一個(gè)屏幕多邊形在屏幕上繪制出來(lái)就是多邊形的象素處理過(guò)程,它包括光柵化、隱藏面消除、明暗處理。光柵化、隱藏面消除、明暗處理是整個(gè)3D圖形生成過(guò)程中最內層的處理。他們是三個(gè)二維插值過(guò)程。光柵化是用屏幕空間三角形的頂點(diǎn)坐標插值,以求得三角形的邊所截取的三角形內掃描線(xiàn)段的端點(diǎn)坐標,并進(jìn)而求得所截掃描線(xiàn)段上的象素坐標。隱藏面消除則是通過(guò)對屏幕空間三角形頂點(diǎn)的深度值(Z坐標) 進(jìn)行插值,從而獲得三角形內掃描線(xiàn)段上每個(gè)象素的深度值。明暗處理是用同樣的方法由頂點(diǎn)光強求得三角形內掃描段上每個(gè)象素的光強。這三種處理的算法具有相同的數學(xué)表示形式,只需將坐標、深度或光強代入該方程就可以得到相應的結果??傊?,場(chǎng)景的繪制過(guò)程可概括為:
對場(chǎng)景中的每個(gè)物體的每個(gè)多邊形做幾何變換將其變換到屏幕空間;
對多邊形內的每一個(gè)掃描段求出其端點(diǎn)及其上每個(gè)象素的坐標;
對掃描段上的每個(gè)象素做隱藏面消除處理及明暗處理。
1.光柵化
光柵化處理通過(guò)插值求得三角形內掃描段的x坐標的起點(diǎn)和終點(diǎn)。問(wèn)題是何處是終點(diǎn)和起點(diǎn)?當使用實(shí)數坐標時(shí)在象素之內的何處進(jìn)行采樣,屏幕坐標是取整數還是保留小數精度?這些問(wèn)題如果處理得不好,就會(huì )在多邊形之間產(chǎn)生孔洞,產(chǎn)生重疊的多邊形,這會(huì )在透明效果處理時(shí)產(chǎn)生嚴重問(wèn)題。如果反走樣處理不精確,則會(huì )在帶有紋理的表面上產(chǎn)生紋理不連續現象。例如,如果對屏幕坐標取整,則屏幕多邊形的頂點(diǎn)將延伸或縮回到離它最近的象素,這樣多邊形的大小將發(fā)生微小的變化,而且不能用密集采樣進(jìn)行反走樣處理,動(dòng)畫(huà)中的“顫抖”現象便是由此而引起的。在象素內何處采樣并不重要,重要的是對象素采樣的處理必須一致。
2.隱藏面消除
全屏幕Z-Buffer(深度緩存器)算法已成為圖形學(xué)事實(shí)上的標準隱藏面消除算法,他雖然簡(jiǎn)單但存儲要求很高。Z-Buffer算法可看作是工作在三維屏幕空間。每一個(gè)象素有一個(gè)二維屏幕空間坐標( xs , ys )和由眼睛空間頂點(diǎn)的深度值插值而得到的z深度值。深度緩存器開(kāi)始時(shí)被初始化為遠處裁剪平面的深度,對每一個(gè)象素比較其插值得到的深度值與已存儲在深度緩存中( xs , ys )處的值,如果該值小于存儲值,則新計算的象素更靠近觀(guān)察者。這時(shí)新計算的象素的明暗處理值將覆蓋幀緩存中的舊值,深度存儲器中的值也換成新計算的值。深度緩存器算法對場(chǎng)景數據庫組織及場(chǎng)景復雜性沒(méi)有限制。在處理復雜場(chǎng)景或物體時(shí),應保證足夠的深度精度。
3.明暗處理
首先計算多邊形頂點(diǎn)的明暗參數,然后在多邊形平面上進(jìn)行插值。這樣繪制出的物體不但具有很強的三維立體感,而且消除了用于近似曲面的多邊形之間的公用邊所形成的不連續特征。實(shí)現這一處理方式的算法有兩種,一種稱(chēng)作Gouraud明暗處理,一種稱(chēng)作Phong明暗處理(均以發(fā)明者的名字命名)。這也是基于多邊形的繪制日益受歡迎的一個(gè)重要原因。Gouraud明暗處理的速度快,但不能產(chǎn)生精確的高光效果,通常用在對速度要求高的場(chǎng)合,如飛行模擬、交互式 CAD應用等。Phong明暗處理可以生成高質(zhì)量的圖像,但將耗費龐大的硬件資源。Gouraud明暗處理僅在多邊形的頂點(diǎn)使用局部反射光照模型計算光強,然后使用頂點(diǎn)處的光強通過(guò)插值求出多邊形內各象素的光強值。而Phong明暗處理則對頂點(diǎn)的法向量進(jìn)行插值,并對多邊形內的每一個(gè)象素用局部反射光照模型計算其光強。一般說(shuō)來(lái),多邊形頂點(diǎn)的光強是頂點(diǎn)的法向量相對于光源和視點(diǎn)的方向的函數,這就是所謂的局部反射光照模型。頂點(diǎn)的法向量用來(lái)近似原物體表面在該點(diǎn)處的法向量,通過(guò)平均公用該頂點(diǎn)的所有多邊形的法向量求得。
Gouraud明暗處理僅與局部光照模型中的漫反射分量一起使用,這是因為當高光點(diǎn)完全落在多邊形之內時(shí),其對多邊形頂點(diǎn)處沒(méi)有任何影響。該方法是目前3D圖形硬件都支持的唯一的明暗處理方法。
4.特殊效果
紋理映射、透明以及霧化(大氣效應)等真實(shí)感效果都是在象素處理階段實(shí)現的。物體表面紋理的定義是在世界坐標系中進(jìn)行的,通過(guò)預處理,每個(gè)帶有紋理的多邊形在其頂點(diǎn)數據中建立了與相應紋理圖的映射關(guān)系。在繪制帶有紋理的多邊形時(shí),其相應的紋理圖也同時(shí)被加載到紋理存儲器中,在求出物體上象素坐標的同時(shí)其相應的紋理坐標也被計算出來(lái)。用該紋理坐標從紋理存儲器中讀出相應紋理象素的值,將其與明暗處理的結果進(jìn)行混合就得到要顯示的象素值。霧化(大氣效應) 則是在計算出的象素值上乘上一個(gè)與深度有關(guān)的衰減因子。對落在同一屏幕位置的象素點(diǎn)的象素值按其所屬物體的透明系數進(jìn)行加權融合就可以產(chǎn)生透明效果。
評論