【问题标题】:Transparent texture framebuffer (OpenGL ES 2)透明纹理帧缓冲区 (OpenGL ES 2)
【发布时间】:2014-01-06 12:19:07
【问题描述】:

我是 FBO 的新手,这个问题已经让我发疯了好几个小时。我有兴趣找到我所要求的解决方案而不是替代方案。这是在 Android 上。

我正在创建一个帧缓冲区,然后在附加到它的纹理上画一个圆圈。然后我将该纹理绘制到默认帧缓冲区,就像它是常规纹理一样。一切都很棒,并按预期显示......

...除了纹理完全不透明的事实,不仅在我绘制圆圈的地方。我希望所有其他区域都是透明的,并且只有纹理的圆形部分可见。更准确地说,我想用透明像素“填充”我的纹理,然后在它们上面绘制我的圆圈,然后将此纹理渲染到默认帧缓冲区并能够看到它背后的内容。 我该怎么做?有可能吗? 或者有办法让我的纹理保持不透明,并告诉 OpenGL 不要渲染其中的黑色像素?

我找到了similar question,但检查的答案没有帮助。它下面的评论建议使用glClear(我假设它指的是glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)),但我在每次glBindFramebuffer 之后都这样做了,但它仍然什么也没做。我还阅读了有关启用 alpha 混合的信息,所以我在每个 glBindFramebuffer 之后都做了 glEnable(GL_BLEND) 和 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA),我的纹理保持不透明。

另一个答案表明它依赖于平台,所以我正在寻找一个 Android 解决方案。

【问题讨论】:

  • 遇到同样的问题,谁能帮忙? @async 你发布这个问题已经很久了。你想清楚了吗?

标签: android opengl-es-2.0 framebuffer


【解决方案1】:

在glClearColor 和glClear 之前尝试glColorMask(TRUE, TRUE, TRUE, TRUE);。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2011-11-24
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多