Pixel data:
顏色: RGBA
簡單地說這是一種讓3D物件產生透明感的技術。屏幕上顯示的3D物件,每個像素中有紅、綠、藍三組數值。若3D環境中允許像素能擁有一組α值,我們就稱它擁有一個α通道。α值是記載像素的透明度,範圍在0.0(透明)到1.0(不透明)之間這樣。一來使得每一個物件都可以擁有不同的透明程度。比如說,玻璃會擁有很高的透明度,而一塊木頭可能就沒什麼透明度可言。α混合這個功能,就是處理兩個物件在螢幕畫面上疊加的時候,還會將α值列入考慮,使其呈現接近真實物件的效果。
Over定義: RGBc = RGBf + (1-αf) RGBb αc =αf +(1-αf) αb Comp 定義: RGBc = β(f over b) + (1-β)(b over f) |
最後的描繪值= SRC(來源)*blending係數 + DEST(目的地)* blending係數
//--------------------------------------
// 設定Rendering state參數
//--------------------------------------
// 指定兩面描繪的模式
pD3DDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
// 光源沒有計算
pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
// 比較Z軸
pD3DDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
// 混色模式(高品質描繪)
pD3DDevice->SetRenderState( D3DRS_DITHERENABLE, TRUE );
// Alfa Brending執行
pD3DDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
// Alfa Brending狀態的設定
pD3DDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pD3DDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
一般半透明效果(alpha=0.0~1.0): D3DRS_SRCBLEND, D3DBLEND_SRCALPHA D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA |
- 畫半透明模型要先畫其後面的模型, 否則即使前面是透明的, 後面的東西也不被描繪
// 描繪四方形
pD3DDevice->SetStreamSource( 0, m_pVB1, 0, sizeof(MY_VERTEX) );
pD3DDevice->SetFVF( MY_VERTEX_FVF );
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
// 描繪三角形
pD3DDevice->SetStreamSource( 0, m_pVB2, 0, sizeof(MY_VERTEX) );
pD3DDevice->SetFVF( MY_VERTEX_FVF );
pD3DDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 1 );
1 comment:
傻拉!!
BLOG是放輕鬆的地方!!!
搞的像ㄍ技術論壇一樣...ㄘㄟ
Post a Comment