繪制管線的功能:在給定虛擬照相機(jī),三維物體,光源,照明模式,以及紋理等諸多條件下,如何生成或者繪制一幅二維圖像。
管線的整體快慢程度是由管線中最慢的那個(gè)階段決定的。
實(shí)時(shí)計(jì)算機(jī)圖形里面,管線分為三個(gè)階段:應(yīng)用程序階段,幾何階段,以及光柵階段。
最慢的管線階段決定繪制速度,即圖像更新速度。
應(yīng)用程序階段由應(yīng)有程序來驅(qū)動(dòng),可以通過軟件來實(shí)現(xiàn):主要包括碰撞檢測(cè),加速算法,動(dòng)畫,以及力反饋等
,在應(yīng)用程序階段的末端,將需要繪制的幾何體輸入到繪制管線的下一格階段,這些幾何體都是繪制圖元(如點(diǎn),線,矩形),最終需要在屏幕上棉線是出來。這是應(yīng)用程序階段最重要的任務(wù)。
幾何階段,根據(jù)體系結(jié)構(gòu),可以用軟件或者硬件來實(shí)現(xiàn),包括變換,投影,光照等處理,計(jì)算繪制的內(nèi)容,如何繪制,以及在什么地方繪制。可以分成若干個(gè)功能階段:模型與視點(diǎn)變換,光照,投影,裁減,以及屏幕映射。
模型和視點(diǎn)變換:
同一個(gè)模型還可以和幾種不同的模型變換聯(lián)系在一起。允許同一個(gè)模型有多個(gè)副本(稱為實(shí)例),可以在同一場(chǎng)景中具有不同的位置,方向,和大小,而不需要對(duì)基本集合體進(jìn)行復(fù)制操作。
模型變換的變換對(duì)象是模型的頂點(diǎn)和法線。物體的坐標(biāo)稱為模型坐標(biāo)。只對(duì)相機(jī)(或者視點(diǎn))可以看到的模型進(jìn)行繪制。為了便于投影和裁減,必須對(duì)相機(jī)和所有的模型進(jìn)行視點(diǎn)變換。變換的目的是要把相機(jī)放在原點(diǎn),然后進(jìn)行視點(diǎn)校準(zhǔn),使其朝向Z軸的負(fù)方向,Y軸指向上方,X軸指向右邊。視點(diǎn)變換后,實(shí)際位置和方向就依賴于當(dāng)前的API.
光照:
為了讓模型看起來更加真實(shí),可以給場(chǎng)景配上一個(gè)或者多個(gè)光源.
對(duì)于受光源影響的模型來說,可以用光照方程來計(jì)算模型上每個(gè)頂點(diǎn)的顏色.物體表面每個(gè)頂點(diǎn)的顏色可以由光源及其特性,頂點(diǎn)的位置和法線,頂點(diǎn)所在的材質(zhì)屬性來計(jì)算.當(dāng)在屏幕上繪制三角形時(shí),可以通過對(duì)三角形頂點(diǎn)的顏色進(jìn)行插值,這種插值技術(shù)成為gouraud著色.
光照計(jì)算是在世界空間中進(jìn)行的,但是,如果對(duì)光源進(jìn)行視點(diǎn)變換,再觀察空間中會(huì)得到同樣的光照效果.這是因?yàn)?/span>,即使將參與光照計(jì)算的所有實(shí)體都變換到同一個(gè)空間(即觀察空間)中,光源,相機(jī),以及模型之間的相對(duì)位置依然保持不變.
投影:
光照處理之后,繪制系統(tǒng)就開始進(jìn)行投影,目的是將視體變換為一個(gè)單位立方體.,這個(gè)立方體的對(duì)角分別是(-1,-1,-1)和(1,1,1).通常也稱單位立方體為規(guī)范視體(canonical view volume).
目前主要有兩種投影方法:正投影(平行投影)和透視投影。
正投影:把這個(gè)視體變換為單位立方體,正投影的主要特性是平行線在變換之后彼此之間仍然保持平行,這種變換是平移與縮放的組合。
透視投影方法中,物體距離相機(jī)越遠(yuǎn),投影之后就會(huì)變得越小。
裁減:
只有當(dāng)圖元完全或者部分地位于視體內(nèi)部的時(shí)候,才需要將其發(fā)送到光柵階段,在這個(gè)階段可以把圖元在屏幕上繪制出來。需要對(duì)那些部分位于視體內(nèi)的圖元進(jìn)行裁減處理。投影變化之后的圖元只針對(duì)單位立方體進(jìn)行裁減,在裁減之前進(jìn)行視點(diǎn)轉(zhuǎn)換和投影的優(yōu)勢(shì)在于可以使裁減問題變得比較一致,而且圖元可以根據(jù)單位立方體進(jìn)行裁減。
屏幕映射:
進(jìn)入這個(gè)階段的時(shí)候,坐標(biāo)仍舊是三維的,每個(gè)圖元的x和y坐標(biāo)變換到了屏幕坐標(biāo)系中,屏幕坐標(biāo)系連同z坐標(biāo)一起稱為窗口坐標(biāo)系。
光柵階段,利用前面階段產(chǎn)生的數(shù)據(jù)進(jìn)行圖像繪制。
光柵階段的目的:就是給每個(gè)像素(pixel)正確配色,以便正確繪制整副圖像,這個(gè)過程稱為光柵化或者掃描轉(zhuǎn)換,也就是把屏幕間的二維頂點(diǎn)轉(zhuǎn)化為屏幕上的像素。
屏幕空間有一個(gè)z值(深度值),一種或兩種顏色,以及一組或者多組紋理坐標(biāo),其中紋理坐標(biāo)會(huì)與頂點(diǎn)或者屏幕上的像素聯(lián)系在一起。光柵階段進(jìn)行的是單個(gè)像素操作。每個(gè)像素的信息存儲(chǔ)在顏色緩沖器里,顏色緩沖器是一個(gè)矩形的顏色序列(R,G,B)對(duì)于高性能圖形系統(tǒng)來說,光柵階段必須在硬件中完成。一般地,圖形系統(tǒng)采用雙重緩沖機(jī)制.這意味著屏幕繪制時(shí)在一個(gè)后置緩沖器中以離屏方式進(jìn)行的,一旦屏幕已在后置緩沖區(qū)中繪制,后置緩沖區(qū)中的內(nèi)容就不斷與已經(jīng)在屏幕上顯示過的前置緩沖區(qū)中的內(nèi)容進(jìn)行交換.
當(dāng)繪制完整個(gè)場(chǎng)景的時(shí)候,顏色緩沖器應(yīng)該包含從相機(jī)視點(diǎn)處可以觀察到的場(chǎng)景圖元.對(duì)于大多數(shù)圖形硬件來說,這個(gè)過程是通過Z緩沖區(qū)(深度緩沖區(qū))算法來實(shí)現(xiàn).Z緩沖器和顏色緩沖區(qū)形狀大小一樣.
每個(gè)像素都有存儲(chǔ)著一個(gè)z值,這個(gè)z值是從相機(jī)到最近圖元之間的距離,當(dāng)將圖元繪制為相應(yīng)的像素時(shí),需要計(jì)算像素位置處圖元Z值并于同一像素的Z緩沖器內(nèi)容進(jìn)行比較.
顏色緩沖器用來存儲(chǔ)顏色,而Z 緩沖器用來存儲(chǔ)每個(gè)像素的z值.
還可以使用其他緩沖器來產(chǎn)生一些圖像的不同組合,alpha通道和顏色緩沖器聯(lián)系在一起可以存儲(chǔ)一個(gè)與每個(gè)像素相關(guān)的不透明值.
幀緩沖器(Frame buffer)通常包含一個(gè)系統(tǒng)所具有的所有緩沖器,稱為累積緩沖器,有時(shí)候卻認(rèn)為是顏色緩沖器和z緩沖器的組合。