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'作爲源和目標混合。 –