c++ - 使用低 Alpha 值时的 Alpha 混合问题
问题描述
我知道这个问题可能看起来很傻,但是在使用 alpha 通道值混合纹理时遇到问题,如果我的 alpha 值从 1.0 变为接近 0.501,则对象会慢慢消失,一旦达到 0.5 或更低,它就会消失。这是两个显示它的打印屏幕:
我希望即使在 0.1 alpha 左右也能看到上面的树,即使它几乎不可见并且大部分是透明的,而不是突然消失。以下是我当前的混合状态代码:
D3D11_BLEND_DESC bd;
ZeroMemory(&bd, sizeof(D3D11_BLEND_DESC));
bd.RenderTarget->BlendEnable = true;
bd.AlphaToCoverageEnable = true;
bd.RenderTarget->RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
bd.RenderTarget->SrcBlend = D3D11_BLEND_SRC_ALPHA;
bd.RenderTarget->DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
bd.RenderTarget->SrcBlendAlpha = D3D11_BLEND_INV_DEST_ALPHA;
bd.RenderTarget->DestBlendAlpha = D3D11_BLEND_ONE;
bd.RenderTarget->BlendOp = D3D11_BLEND_OP_ADD;
bd.RenderTarget->BlendOpAlpha = D3D11_BLEND_OP_ADD;
hr = m_pDevice->CreateBlendState(&bd, &m_pBlendStateON);
if (FAILED(hr))
return Log("Failed to create blend state."); // Log is just a function to register errors on my app.
我的混合因子定义如下:float BlendFactor[4] = { 0,0,0,0 };
,我的示例蒙版使用默认值UINT SampleMask = 0xffffffff;
如果有人知道我可以做些什么来使透明度从 1.0f 缓慢衰减到 0.0f 值,那将是一个很大的帮助。
编辑:我发现如果我禁用AlphaToCoverageEnable
它,它不会剔除颜色,直到它达到 0.0f alpha 值,但不知道该怎么做,因为我需要,AlphaToCoverageEnable
否则树枝上的这个方块会出现,有什么办法可以改变阈值,所以AlphaToCoverageEnable
只有在 alpha 实际上是 0.0f 时才剔除颜色?
解决方案
推荐阅读
- javascript - post方法不会触发exceljs中的“下载excel工作簿”功能
- android - 如何使工具栏按钮可点击?
- sql - 仅当关系表之间匹配多个关系时,如何构造一个连接来自另一个表的记录的查询
- gstreamer - 在 gstreamer 中使用什么插件和模板?
- octave - 变量作为字符串中的指数(八度)
- jquery - 在shopify中使用jquery选择DropDown
- tensorflow - 带有中间层输出的 Keras 多输出自定义损失
- javascript - 仅通过 ajax 加载 Wordpress shourcode 没有 jquery
- r - 在ggplot2中使用颜色信息作为aes_string的图层时,如何指定要显示的颜色图例/指南?
- java - Phoenix Kerberos + Spring Boot:检查验证票