我是 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 解决方案。
最佳答案
尝试 glColorMask(TRUE, TRUE, TRUE, TRUE);在 glClearColor
和 glClear
之前。
关于android - 透明纹理帧缓冲区 (OpenGL ES 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656145/