0

我正在尝试实现一个简单的效果:在屏幕上绘制具有透明背景的图像。我正在使用 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);

屏幕上什么都没有!我错过了什么吗?

我确定我的图像是正确的,因为当我在未启用混合的情况下进行绘制时,除了透明部分变为纯白色之外,所有内容都会显示出来。

任何帮助,将不胜感激。

4

3 回答 3

1

您必须确定渲染目标的每个像素的哪些组件在混合期间是可写的。

descBlend.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
于 2013-02-15T09:37:47.863 回答
1

用你清晰的包容ZeroMemory(&descBlend, sizeof(descBlend));所有领域。此掩码确定是否写入通道,如果为零则不写入。尝试将其设置为.D3D11_BLEND_DESCRenderTargetWriteMaskD3D11_COLOR_WRITE_ENABLE_ALL

于 2013-02-15T09:38:06.990 回答
1

我曾经试图实现类似的东西,并写下了我在gamedev所做的事情

于 2013-02-15T10:08:06.630 回答