在金属中混合:alpha 设置为 0 仍然不透明



我在金属中设置混合时遇到问题。即使从 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);
}

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

sourceAlphaBlendFactordestinationAlphaBlendFactor与构建 alpha 通道的混合有关。 即它们控制将写入目标缓冲区的alpha,这对您来说并不真正可见。您可能对写入帧缓冲区的 RGB 更感兴趣。

请尝试改为为sourceRGBBlendFactordestinationRGBBlendFactor设置值。对于传统的 alpha 混合,将sourceRGBBlendFactor设置为MTLBlendFactorSourceAlpha,将destinationRGBBlendFactor设置为MTLBlendFactorOneMinusSourceAlpha

最新更新