2012-08-05 28 views
8

ठीक है, इसलिए मैं अपने 3 डी एप्लिकेशन में काम करने के लिए अल्फा ब्लेंडिंग प्राप्त करने का प्रयास कर रहा हूं लेकिन यह नहीं होना चाहता है। मैं रेंडरिंग लूप के बहुत अंत में ऑर्थोगोनल प्रक्षेपण के साथ 2 डी छवियों को चित्रित कर रहा हूं (गहराई परीक्षण सक्षम रहता है) और छवि बनावट में पारदर्शी भाग होते हैं लेकिन वे काले रंग देते हैं। यहाँ मेरी सम्मिश्रण कोड है:डायरेक्टएक्स 11 अल्फा ब्लेंडिंग काम नहीं कर रहा

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; 

मैं केवल उपयोग कर रहा हूँ एक भी लक्ष्य प्रस्तुत करना और shaders अंदर नहीं पूर्व गुणा alphas। मैंने हर जगह देखा है और D3D11_BLEND_STATE के लिए विभिन्न प्रकार के विभिन्न संयोजनों का प्रयास किया है लेकिन कुछ भी काम नहीं किया है। सबसे नज़दीक मैं प्राप्त कर सकता हूं जब मैं अल्फाटोवेवर को सत्य पर सेट करता हूं लेकिन फिर यह काम नहीं करता है अगर मैं शिखर के अल्फा को बदलता हूं, और मुझे पता है कि मैं क्या कर रहा हूं अल्फाटोवॉवरेज गलत होना चाहिए।

उत्तर

1

मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन मेरे पास एक समान issue था।

मुझे यह सुनिश्चित करना था कि आप ड्राइंग से पहले मिश्रण स्थिति को सेट/संलग्न करें और फिर पारदर्शी 2 डी छवि के ड्रॉ कॉल के बाद अक्षम करें। अधिक जानकारी मिल सकती है: DirectX Image texture quad displays underlying controls color where it is transparent