首页 > 解决方案 > 在金属中混合:alpha 设置为 0 仍然不透明

问题描述

我无法在 Metal 中设置混合。即使从 Apple 提供的Hello Triangle示例开始,使用以下代码

pipelineStateDescriptor.colorAttachments[0].blendingEnabled = YES;
pipelineStateDescriptor.colorAttachments[0].sourceAlphaBlendFactor = MTLBlendFactorZero;
pipelineStateDescriptor.colorAttachments[0].destinationAlphaBlendFactor = MTLBlendFactorZero;

和片段功能

fragment float4 fragmentShader(RasterizerData in [[stage_in]]) {
    return float4(in.color.rgb, 0);
}

三角形仍然完全不透明。我最终想要实现的是通过使用不同的混合因子在两个形状之间混合,但我想我会从一个简单的例子开始来了解发生了什么。我错过了什么?

标签: metal

解决方案


sourceAlphaBlendFactor并且destinationAlphaBlendFactor与构建 Alpha 通道的混合有关。即,它们控制将写入目标缓冲区的alpha ,这对您来说实际上是不可见的。您可能对写入帧缓冲区的 RGB 更感兴趣。

sourceRGBBlendFactor尝试为and设置值destinationRGBBlendFactor。对于传统的 alpha 混合设置sourceRGBBlendFactorMTLBlendFactorSourceAlpha和设置destinationRGBBlendFactorMTLBlendFactorOneMinusSourceAlpha


推荐阅读