metal - 在金属中混合: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);
}
三角形仍然完全不透明。我最终想要实现的是通过使用不同的混合因子在两个形状之间混合,但我想我会从一个简单的例子开始来了解发生了什么。我错过了什么?
解决方案
sourceAlphaBlendFactor
并且destinationAlphaBlendFactor
与构建 Alpha 通道的混合有关。即,它们控制将写入目标缓冲区的alpha ,这对您来说实际上是不可见的。您可能对写入帧缓冲区的 RGB 更感兴趣。
sourceRGBBlendFactor
尝试为and设置值destinationRGBBlendFactor
。对于传统的 alpha 混合设置sourceRGBBlendFactor
为MTLBlendFactorSourceAlpha
和设置destinationRGBBlendFactor
为MTLBlendFactorOneMinusSourceAlpha
推荐阅读
- python - 模块中的变量范围
- java - 如何强制 Red Hat OpenJDK 8 在 Windows 上像 AdoptOpenJDK 和 Oracle JDK 一样清晰地呈现字体?
- vba - 无法获取工作表函数类的 vlookup 属性?
- visual-studio - 我有一张图片 18F4550 如何读取超声波传感器的距离
- r - 长到宽 - 将一列(具有多个度量)转换为一对列
- node.js - TypeError:数据必须是缓冲区
- r - 如何在我的编织 Rmd 文件中抑制警告消息
- twitter-bootstrap - 最初折叠的引导卡中的制表符表格式
- laravel - 来自 vue 时,auth() 在控制器中不起作用
- java - 记录未保存在 mysql DB 中