2012-08-05 17 views
8

Okay, also habe ich versucht, Alpha Blending in meiner 3D-Anwendung zu verwenden, aber es will einfach nicht passieren. Ich zeichne 2D-Bilder mit einer orthogonalen Projektion ganz am Ende der Rendering-Schleife (Tiefenprüfung bleibt aktiviert) und die Bildtexturen haben transparente Teile, aber sie rendern schwarz. Hier ist mein Blending Code:DirectX 11 Alpha Blending funktioniert nicht

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); 

Und wenn es hier hilft, ist die Textur Beschreibung:

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; 

ich nur ein einziges Renderziel verwenden und nicht Alphas in den Shadern vorge multipliziert wird. Ich habe überall hingeschaut und alle möglichen Kombinationen für die D3D11_BLEND_STATE ausprobiert, aber nichts hat funktioniert. Der nächste, den ich bekommen kann, ist, wenn ich die AlphaToCoverage auf TRUE setze, aber dann funktioniert es nicht, wenn ich das Alpha der Scheitelpunkte ändere, und ich weiß, was ich mache, sollte AlphaToCoverage FALSE sein.

Antwort

Verwandte Themen