2
我有一个问题,我没有解决,所以我寻求你的帮助。 我正在开发一个DirectX应用程序,其中我的场景包含一个包含文本的页面,我试图添加higlighting逻辑。DirectX混合状态问题
所以我想能够突出显示一个文本,也要改变这个突出显示的颜色\不透明度。
为了做到这一点,我试图使用ID3D11BlendState。请考虑一个小代码片段我如何创建它:
HRESULT hr = S_OK;
D3D11_BLEND_DESC blendDesc;
D3D11_RENDER_TARGET_BLEND_DESC rtBlend;
Microsoft::WRL::ComPtr<ID3D11BlendState> state;
auto d3dDev = this->dxDevMt.GetD3DDevice();
rtBlend.BlendEnable = TRUE;
rtBlend.SrcBlend = D3D11_BLEND_DEST_COLOR;
rtBlend.DestBlend = D3D11_BLEND_ZERO;
rtBlend.BlendOp = D3D11_BLEND_OP_ADD;
rtBlend.SrcBlendAlpha = D3D11_BLEND_ONE;
rtBlend.DestBlendAlpha = D3D11_BLEND_ZERO;
rtBlend.BlendOpAlpha = D3D11_BLEND_OP_ADD;
rtBlend.RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
blendDesc.AlphaToCoverageEnable = FALSE;
blendDesc.IndependentBlendEnable = FALSE;
for (auto &i : blendDesc.RenderTarget) {
i = rtBlend;
}
hr = d3dDev->CreateBlendState(&blendDesc, state.GetAddressOf());
的问题是 - 它不是在某种程度上,我希望它的工作的工作。 只要阿尔法等于1,它看起来只是罚款:
但如果我尝试有所改变, - 这是变成黑色之前的任何颜色: 我真的不明白为什么会出现这种情况和我请求你的指导! 提前谢谢!
您是否在原先呈现的文本上渲染普通的彩色矩形?或者矩形在文本中使用纹理?当全部变黑时,你究竟发生了什么变化?你之前和之后使用了哪些值? – Gnietschow
我正在使用d3d重新突出显示。我创建缓冲区,着色器等 我改变高亮颜色的alpha值 所以它是0 1 0 1 然后0 1 0 0.9 –
这种混合状态看起来很奇怪。你确定这是你想要的吗?通常,您使用'SRC_ALPHA'和'INV_SRC_ALPHA'作为源和目标混合。 –