0

在将 directX11 中的文本渲染到其他对象上时,我得到了一些奇怪的结果。每个字符都变成黑色背景(我的清除颜色)。如果文本直接呈现到背景,一切都很好。我使用 imgui lib 进行渲染。我认为这是由错误的混合设置引起的 - 这些是我的设置:

D3D11_BLEND_DESC desc;
desc.AlphaToCoverageEnable = false;
desc.IndependentBlendEnable = false;
desc.RenderTarget[0].BlendEnable = false;
desc.RenderTarget[0].SrcBlend = D3D11_BLEND_ONE;
desc.RenderTarget[0].DestBlend = D3D11_BLEND_ZERO;
desc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
desc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;
desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
desc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
desc.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;

这是显示问题的图像:

这是显示问题的图像

更新#1:

这是我用来绘制字符串的方法:https ://github.com/ocornut/imgui/blob/9cff4d6e5e76dd18d9c4ee7a1560563da2059a44/imgui_draw.cpp#L2937

我的clearcolor是:

ImVec4 clearColor = ImVec4(0.f, 0.f, 0.f, 0.f);

使用 ErnieDingo 的设置,我得到了这个结果: 积极的部分:每个角色周围的框都消失了。不好的部分:文本非常模糊/不清晰,特别是如果文本在深色背景/无背景上呈现。

更新#2:这张图片似乎简明扼要地显示了这个问题:在此处输入图像描述正方形的重叠部分应该是黄色的,而不是像顶部那样的绿色。第一个图像还显示,仅考虑了字体的透明背景,这导致了每个字母后面的奇怪条。

4

1 回答 1

0

看看你的截图,你只是用包含你的 glpyhs 的纹理渲染四边形对吗?我查看了我自己的混合状态代码,我假设您使用的技术与我所做的类似。

我的代码在 C# 中,但它的 DX 设置相同。你可以试试这些。

        blendStateDescription.RenderTarget[0].IsBlendEnabled = true;
        blendStateDescription.RenderTarget[0].SourceBlend = D3D11.BlendOption.SourceAlpha;
        blendStateDescription.RenderTarget[0].DestinationBlend = D3D11.BlendOption.InverseSourceAlpha; //
        blendStateDescription.RenderTarget[0].BlendOperation = D3D11.BlendOperation.Add;

        blendStateDescription.RenderTarget[0].SourceAlphaBlend = D3D11.BlendOption.SourceAlpha; //Zero
        blendStateDescription.RenderTarget[0].DestinationAlphaBlend = D3D11.BlendOption.InverseSourceAlpha;
        blendStateDescription.RenderTarget[0].AlphaBlendOperation = D3D11.BlendOperation.Maximum;

        blendStateDescription.RenderTarget[0].RenderTargetWriteMask = D3D11.ColorWriteMaskFlags.All;

我使用 SourceAlpha 和 InverseSourcealpha,但我相信使用 Source 作为 1 和 Destination 作为 0 也可能没问题。但是,如果您参考 Microsoft DX 页面中关于混合的内容,就会在此处发布数学计算结果。

如果这不起作用,请回复此线程。我将假设您的源纹理是 RGBA 纹理,并且纹理的 alpha 分量为 0,背景也是黑色。

于 2020-02-06T21:07:54.390 回答