(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
AlphaRef = 0xa0;
AlphaFunc = Greater;
(demo)源代碼下載