【问题标题】:Why is glBlendFunc() not doing anything in my OpenGL ES 2.0 application?为什么 glBlendFunc() 在我的 OpenGL ES 2.0 应用程序中没有做任何事情?
【发布时间】:2011-07-19 09:19:41
【问题描述】:

我正在绘制非纹理三角形,其 alpha 在像素着色器中被显式设置为 0.5 以进行测试。我的应用程序基于 Xcode 提供的 Opengl ES 预制件。我还没有碰过我的 EAGLView 课程。

我打电话

glEnable(GL_ALPHA)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SC_ALPHA)
glDrawArrays(...)

我的 clearColor 是 0,0,0,1,CAEAGLayer 的格式是 RGBA8。

我看到的结果是没有发生任何类型的混合,绘制的像素只是替换了下面的内容。我也尝试过使用 GL_ONE,GL_ONE。

我尝试将我的 CAEAGLayer 的 opaque 属性设置为 false。结果似乎是,无论混合模式如何,绘制像素的颜色都会根据 alpha 值与白色混合。所以 1,0,0,1 的 gl_FragColor 输出为 1,0,0,1 但 1,0,0,0 输出为 1,1,1,?

此行为在设备和模拟器上是一致的。这里有什么问题?

【问题讨论】:

    标签: ios opengl-es


    【解决方案1】:

    您必须启用GL_BLEND 而不是GL_ALPHAGL_ALPHA 常量有完全不同的用途(作为颜色通道标识符)。所以你的glEnable 调用实际上会导致GL_INVALID_ENUM 错误或类似的东西。

    【讨论】:

    • 1.我只是好奇,glBlendFunc() 是否可用于 ES 2.0?我认为使用 2.0 我们必须在片段着色器中进行所有混合
    • @sid 不,无法在片段着色器中进行混合,因为片段着色器无法访问像素的先前颜色,它只能写入新颜色。即使在最新的最新桌面 GL 中,您仍然必须使用 glBlendFunc,尽管已经有 glBlendFuncSeperateglBlendEquation 之类的进步(但我不知道 ES 有这些程度),但没有一个完全可编程的混合阶段。
    猜你喜欢
    • 2021-08-11
    • 2021-12-20
    • 1970-01-01
    • 2011-07-25
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多