【问题标题】:OpenGL ES 2.0 iOS zero alpha pixel creating opaque colorOpenGL ES 2.0 iOS 零 alpha 像素创建不透明颜色
【发布时间】:2015-04-30 15:51:11
【问题描述】:

我清除了一个帧缓冲区...

glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

...我启用了这样的混合...

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
[self render]
glDisable(GL_BLEND);

在那个渲染代码中,我只是添加了一个四边形并绘制它。在我的片段着色器中,我有...

gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);

这会产生一个清晰的四边形。伟大的。没有颜色,没有 alpha,什么都没有……明白了。但是,我将片段着色器更改为...

gl_FragColor = vec4(1.0, 0.0, 0.0, 0.0);

我得到了填充白色的四边形。有人可以向我解释一下如何用完全透明的红色填充四边形会产生不透明的白色,而不仅仅是透明的吗?

【问题讨论】:

  • 你在使用深度缓冲/深度测试吗?
  • 好吧,您将GL_ONE 作为glBlendFunc() 的第一个参数。因此,您将片段颜色添加到目标值,与 alpha 值无关。
  • @RetoKoradi 正确,因此片段颜色为 (1, 0, 0, 0),目标颜色为 (0, 0, 0, 0)。将它们加在一起得到 (1, 0, 0, 0),对吗?为什么 (1, 0, 0, 0) 的最终值呈现为白色?在我看来应该很清楚,因为 alpha 值为 0,或者至少是某种红色?
  • @AyanSengupta 我实际上禁用了深度测试。这是个问题吗?
  • 是的,你会认为它是红色的。

标签: ios opengl-es blending


【解决方案1】:

GL_ONE_MINUS_SRC_ALPHA 不行

(1, 1, 1, 1) - (As/kA, As/kA, As/kA, As/kA)

所以如果 As 为 0 会导致 (1, 1, 1, 1)?

ED 虽然我不清楚为什么当您将片段从 (0, 0, 0, 0) 设置为 (1, 0, 0, 0) 时会产生不同的效果。我注意到我用过

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

使用混合函数的不同参数会得到什么?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2015-08-08
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多