深度測試與alpha混合(5) 摘要:
透過那些透明度非常高的物體看其他物體,例如透過幾乎完全透明的玻璃看其他物體,會感到玻璃好像不存在,在三維圖形程序中渲染時(shí)就可以不渲染這些透明度非常高的物體,從而可以提高渲染速度,這可以通過alpha測試來實(shí)現(xiàn)。
alpha測試根據(jù)當(dāng)前像素是否滿足alpha測試條件(即是否達(dá)到一定的透明度)來控制是否繪制該像素,圖形程序應(yīng)用alpha測試可以有效地屏蔽某些像素顏色。與alpha混合相比,alpha測試不將當(dāng)前像素的顏色與顏色緩沖區(qū)中像素的顏色混合,像素要么完全不透明,要么完全透明。由于無需進(jìn)行顏色緩沖區(qū)的讀操作和顏色混合,因此alpha測試在速度上要優(yōu)于alpha混合。
深度測試與alpha混合(4) 摘要:
當(dāng)對物體表面使用了紋理之后,像素的alpha值就是紋理alpha混合之后的值,所以這又取決于紋理的
alpha混合方法,紋理alpha混合方法決定了紋理alpha混合之后的alpha值是取自材質(zhì),還是取自紋理,或者取自二者的某種運(yùn)算。像素
alpha值的具體計(jì)算過程是這樣的,首先得到頂點(diǎn)alpha值,頂點(diǎn)alpha值可能是直接指定的,也可能是光照計(jì)算得到,然后根據(jù)著色模式對頂點(diǎn)
alpha值進(jìn)行插值,得到的結(jié)果再根據(jù)紋理alpha混合方法和紋理采樣得到的alpha值進(jìn)行指定的運(yùn)算,得到最終每個(gè)像素的alpha值。
深度測試與alpha混合(3) 摘要:
alpha源混合系數(shù)通常設(shè)置為D3DBLEND_SRCALPHA,即當(dāng)前繪制像素的alpha值。目標(biāo)混合系數(shù)設(shè)置為
D3DBLEND_INVSRCALPHA,即1減去當(dāng)前繪制像素的alpha值。那么當(dāng)前繪制像素的alpha值又是如何得到的呢?如果沒有使用材質(zhì)和紋理,當(dāng)前繪制像素的alpha值來自每個(gè)頂點(diǎn)顏色設(shè)置的alpha值;如果使用光照和材質(zhì),則當(dāng)前像素的alpha值來自物體表面材質(zhì);如果為物體表面使用了紋理,則alpha值還與紋理有關(guān)。
深度測試與alpha混合(2) 摘要:
在前面介紹的示例程序中,繪制圖形的顏色總是替換當(dāng)前顏色緩沖區(qū)中存在的顏色,這樣后面的物體總是覆蓋在原有的物體上。但是當(dāng)想要繪制類似于玻璃、水等具有透明效果的物體時(shí),這種方法顯然滿足不了要求。通過定義一個(gè)表示物體半透明度的alpha值和一個(gè)半透明計(jì)算公式,可以將要繪制的物體顏色與顏色緩沖區(qū)中存在的顏色相混合,從而繪制出具有半透明效果的物體。Direct3D計(jì)算alpha顏色混合的方法如下:
color = (RGBsrc * Ksrc) OP (RGBdst * Kdst)
深度測試與alpha混合(1) 摘要:
在繪制復(fù)雜的三維場景時(shí),不可避免地會出現(xiàn)物體間的相互遮擋,在這種情況下,為了正確地繪制場景需要使用深度測試。半透明物體的繪制不同于不透明物體,
Direct3D通過alpha混合實(shí)現(xiàn)半透明物體的繪制。深度測試可以簡化復(fù)雜場景的繪制,alpha混合可以使繪制的三維場景更完整、更逼真。
在復(fù)雜的場景中,通常有多個(gè)物體需要繪制,這些物體之間通常會存在遮擋關(guān)系,離觀察點(diǎn)較遠(yuǎn)的物體會因?yàn)榻幬矬w的者的遮擋而不可見或只有部分可見,Direct3D圖形系統(tǒng)提供了深度測試功能來實(shí)現(xiàn)這種效果。