2013-02-15 136 views
0

我試圖實現一個簡單的效果:在透明背景下在屏幕上繪製圖像。我使用SpriteBatches來做到這一點。與Direct3D SpriteBatch混合

這裏是我創建的混合狀態代碼:

D3D11_BLEND_DESC descBlend; 
ZeroMemory(&descBlend, sizeof(descBlend)); 
descBlend.RenderTarget[0].BlendEnable = true; 
descBlend.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; 
descBlend.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; 
descBlend.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; 
descBlend.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA; 
descBlend.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; 
descBlend.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE; 

m_d3dDevice->CreateBlendState(&descBlend, &m_Blend); 

我開始畫我的精靈有:

m_SpriteBatch->Begin(SpriteSortMode_BackToFront, m_Blend); 

沒有顯示在屏幕上!我錯過了什麼嗎?

我確定我的圖像是正確的,因爲當我繪製時沒有啓用混合,除透明部分變成純白色之外,所有東西都顯示出來。

任何幫助,將不勝感激。

回答

1

我曾經試圖實現類似的目標,並寫下我在gamedev

+0

謝謝。這個帖子幫了很大忙。我不僅解決了當前的問題,而且解決了我一定會遇到的一些未來問題。 :) – l3utterfly 2013-02-15 12:24:29

1

您必須在混合過程中識別渲染目標中每個像素的哪些組件可寫。

descBlend.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; 
+0

謝謝。它解決了這個問題。 – l3utterfly 2013-02-15 12:25:31

1

隨着ZeroMemory(&descBlend, sizeof(descBlend));你清楚D3D11_BLEND_DESC包容RenderTargetWriteMask的所有領域。這個掩碼決定了通道是否被寫入,如果它沒有寫入任何內容。嘗試將其設置爲D3D11_COLOR_WRITE_ENABLE_ALL

+0

謝謝。那就是訣竅。我知道我錯過了一些簡單的事情。 – l3utterfly 2013-02-15 12:23:26