2012-08-05 37 views
8

さて、3DアプリケーションでAlpha Blendingを動作させようとしていましたが、それは起こりたくありません。私はレンダリングループの最後に正射影の2次元画像を描画しています(深度テストは有効のままです)。画像テクスチャは透明部分を持ちますが、黒くレンダリングします。 は、ここに私のブレンドコードです:DirectX 11 Alpha Blendingが動作しない

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; 

私は、単一のターゲットをレンダリングし、シェーダ内でアルファを事前に乗じていない使用しています。私はどこからでも見て、D3D11_BLEND_STATEのさまざまな組み合わせを試しましたが、何も効果がありませんでした。 AlphaToCoverageをTRUEに設定すると最も近いのですが、頂点のアルファを変更するとうまくいかず、AlphaToCoverageを実行しているものが偽であるはずです。

答えて

関連する問題