需要对"混合"进行一些澄清。在direct3d 11

时间:2015-07-29 00:59:41

标签: c++ direct3d direct3d11

我通过谷歌搜索并找到了解释如何在direct3d 11中进行混合的结果。所以我发这篇文章只是为了验证我是否完全理解这些概念。

在大多数情况下,我有点理解混合的概念。我们通过组合两种颜色并产生最终颜色来混合颜色。这主要通过direct3d在输出合并阶段中具有的两个方程来完成。

FinalColor = (Source Color * Source Blend Factor) + (Destination Color * Destination Blend Factor)

FinalAlpha = (Source Alpha * Source Alpha Blend Factor) + (Destination Alpha * Destination Alpha Blend Factor)

颜色源Source ColorSource Alpha由Pixel Shader输出定义。目标Destination ColorDestination Alpha由渲染目标(后备缓冲区)中的任何颜色定义。

现在,我在理解混合因子Source Blend FactorDestination Blend FactorSource Alpha Blend FactorDestination Alpha Blend factor

时遇到了一些困难

由于我知道这些混合因子是由D3D11_RENDER_TARGET_BLEND_DESC定义的,我可以使用成员SrcBlend并为其分配标记D3D11_BLEND_SRC_COLOR ...这意味着混合因子{ {1}}将具有像素着色器输出的颜色。

那么你认为我理解混合的概念吗?还是有什么我想念的? (随意纠正我)

1 个答案:

答案 0 :(得分:0)

混合方程甚至比你上面写的更灵活。通用混合方程是:

DestColor = Color1 <ColorOp> Color2
DestAlpha = Alpha1 <AlphaOp> Alpha2

虽然Color1通常是像素着色器的输出,但它(以及Color2Alpha1Alpha2)可以是{中的任何值{3}}枚举。同样,虽然混合运算符通常是+,但它实际上可以是BLEND枚举中的任何值。它们共同提供了所有可能的归一化线性混合操作的完整集合。有关用于“传统Alpha混合”的值的示例,请参阅BLEND_OP