2013-02-27 88 views
0

我非常渴望在DirectX中實現所需的alpha混合效果。 我嘗試繪製紋理,並在其上彩色三角形條。DirectX9中的Alpha混合問題

儘管我嘗試了所有嘗試,但看起來條紋的顏色受到以前繪製的紋理顏色的影響。即使我將D3DRS_ALPHABLENDENABLE設置爲FALSE,我仍然會看到受影響的顏色。

下面是圖像如何猜想的樣子(用OpenGL渲染)

enter image description here

這裏是我所得到的與DirectX渲染:

enter image description here

正如你所看到的,第二張圖像紫色條帶有黃色陰影,沒有任何特定原因:((黃色矩形是紋理,不是多邊形)。

這裏是我的引擎使用的初始化設置:

m_pDirect3D_Device->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); 
m_pDirect3D_Device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); 
m_pDirect3D_Device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); 

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_BLENDDIFFUSEALPHA); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); 

這些設置是給了我正確的Alpha混合紋理的唯一設置,但我絕不能達到多邊形的正確混合。任何幫助?

回答

1

我終於明白了。 除了Alpha Blending,還有一個顏色混合。因此,DirectX會將最後一個紋理的顏色與最後一個基元進行合併。拉絲紋理之前

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTSS_COLORARG1); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); 

- 這意味着僅使用:這意味着只需要顏色從原始的(擴散),以及 -

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTSS_COLORARG1); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE); 

繪製原語前: 爲了解決這個問題,我們需要設置紋理的顏色。

+0

非常好。謝謝 – parrowdice 2015-12-07 14:32:43

0

舊主題,但有用的一個!

我注意到一個小細節,只是爲了避免有些困惑:我認爲參數SetTextureStageState應該D3DTOP_SELECTARG1而不是D3DTSS_COLORARG1(相同的值,無論如何,所以沒什麼大不了的!)。