2012-08-05 111 views
8

好吧,所以我一直試圖讓Alpha混合在我的3D應用程序中工作,但它只是不想發生。我在渲染循環的最後繪製了具有正交投影的2D圖像(深度測試保持啓用狀態),圖像紋理具有透明部分,但是它們呈現黑色。 這裏是我的代碼混合:DirectX 11 Alpha混合不工作

D3D11_BLEND_DESC blendStateDesc; 
ZeroMemory(&blendStateDesc, sizeof(D3D11_BLEND_DESC)); 
blendStateDesc.AlphaToCoverageEnable = FALSE; 
blendStateDesc.IndependentBlendEnable = FALSE;   
blendStateDesc.RenderTarget[0].BlendEnable = TRUE; 
blendStateDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA; 
blendStateDesc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; 
blendStateDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD; 
blendStateDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_SRC_ALPHA; 
blendStateDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_DEST_ALPHA; 
blendStateDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD; 
blendStateDesc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL; 

if (FAILED(device->CreateBlendState(&blendStateDesc, &blendState))) { 
printf("Failed To Create Blend State\n"); 
} 
deviceContext->OMSetBlendState(blendState, NULL, 0xFFFFFF); 

如果它幫助這裏的紋理描述:

D3D11_TEXTURE2D_DESC texDesc; 
texDesc.Width = TextureWidth; 
texDesc.Height = textureHeight; 
texDesc.MipLevels = 1; 
texDesc.ArraySize = 1; 
texDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; 
texDesc.SampleDesc.Count = 1; 
texDesc.SampleDesc.Quality = 0; 
texDesc.Usage = D3D11_USAGE_IMMUTABLE; 
texDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE; 
texDesc.CPUAccessFlags = 0; 
texDesc.MiscFlags = 0; 

我只使用一個單一的渲染目標,而不是預先乘以着色器內的Alpha。我到處尋找並嘗試D3D11_BLEND_STATE的所有不同組合,但沒有任何工作。 最接近的我可以得到的是,當我將AlphaToCoverage設置爲TRUE,但如果我更改頂點的alpha,它不起作用,我知道我在做什麼AlphaToCoverage應該是FALSE。

回答