緩衝區Alpha Blend

(demo)源代碼下載

Alpha blend

Alpha混合通常是爲了實現透明效果,透明效果的程度通過alpha值來控制,對於一個8bit的alpha chanel,可以產生0-255級透明效果,0表示完全透明,255表示完全不透明,在D3D中alpha值的來源主要有三種.


顏色混合方程 

 

其中op在這裏定義爲混合操作

共有五種形式

ADD表示相加操作,即

SUBTRACT表示相關(目標-源),即

REV_SUBTRACT表示反射的相關(源-目標),即

MIN表示取源、目標顏色中較小值,即

MAX表示取源、目標顏色中較大值,即



融合因子:

D3DBLEND_ZERO 融合因子=(0,0,0,0)
D3DBLEND_ONE 融合因子=(1,1,1,1)
D3DBLEND_SRCCOLOR 融合因子=(R_src,G_src,B_src,A_src)
D3DBLEND_INVSRCCOLOR 融合因子=(1-R_src,1-G_src,1-B_src,1-A_src)
D3DBLEND_SRCALPHA 融合因子=(1-A_src,A_src,A_src,A_src)
D3DBLEND_INVSRCALPHA 融合因子=(1-A_src,1-A_src,1-A_src,1-A_src)
D3DBLEND_DESTALPHA 融合因子=(A_dst , A_dst, A_dst  , A_dst)
D3DBLEND_INVDESTALPHA 融合因子= (1-A_dst, 1-A_dst, 1-A_dst , 1-A_dst ).
D3DBLEND_DESTCOLOR 融合因子=(R_dst , G_dst, B_dst  , A_dst).
D3DBLEND_INVDESTCOLOR 融合因子= (1 - R_dst, 1 - G_dst, 1 - B_dst, 1 - A_dst).
D3DBLEND_SRCALPHASAT 融合因子= (f, f, f, 1),其中f = min(A_src,1 - A_dst)


其中R_src  , G_src , B_src  , A_src分別表示源(即source)像素的紅、綠、藍、透明四個分量值,而R_dst  , G_dst, B_dst  , A_dst表示目標(即destination)像素的紅、綠、藍、透明四個分量值。




下面我們用GLSL 來簡單實現一下其中的一些效果.

BlendOp = Add;
SrcBlend = One;
DestBlend = Zero;

實現的效果,和沒有用AlphaBlendEnable效果一樣.




BlendOp = Add;
SrcBlend = One;
DestBlend = One;

這是原操作數爲一,目的操作數也爲一的時候的效果,加上以前的反射效果,已經很好的模仿玻璃材質



當然我們使用下面這種效果時,源操作數爲0,目的操作數爲1 時候,就看不見Teapot了

BlendOp = Add;
SrcBlend = Zero ;
DestBlend = One;



下面我們使用源融合爲源顏色

BlendOp = Add;
SrcBlend = SrcColor ;
DestBlend = One;



我們接着使用源融合爲源顏色,目的融合爲目的顏色

BlendOp = Add;
SrcBlend = SrcColor ;
DestBlend = DestColor;


AlphaFunc 

函數的參數有 Never, Less, LEqual, Equal, Greater, NotEqual, GEqual, Always
這裏有一張tga格式的圖片,設置一下參照
AlphaTestEnable = true;
AlphaRef = 0xa0;
AlphaFunc = Greater;
可以得到下面這種鏤空的效果

(demo)源代碼下載

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章