我正在努力实现一个简单的效果:在屏幕上用透明背景绘制图像。我正在使用SpriteBatches来做到这一点。
以下是我创建混合状态的代码:
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);
屏幕上没有显示任何内容!我错过了什么吗?
我确定我的图像是正确的,因为当我在没有启用混合的情况下进行绘制时,除透明部分变为纯白色外,所有内容都会显示。
任何帮助都将不胜感激。
答案 0 :(得分:1)
在混合过程中,您必须确定渲染目标的每个像素的哪些成分是可写的。
descBlend.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
答案 1 :(得分:1)
使用ZeroMemory(&descBlend, sizeof(descBlend));
清除D3D11_BLEND_DESC
的所有字段,包括RenderTargetWriteMask
。此掩码确定是否写入通道,如果没有写入任何内容。尝试将其设置为D3D11_COLOR_WRITE_ENABLE_ALL
。
答案 2 :(得分:1)
我曾经尝试过类似的事情并写下了我在gamedev
所做的事情