android - 透明纹理帧缓冲区 (OpenGL ES 2)

标签 android opengl-es-2.0 framebuffer

我是 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);glClearColorglClear 之前。

关于android - 透明纹理帧缓冲区 (OpenGL ES 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656145/

相关文章:

android - HAXM安装成功,但Android Studio 2.1无法识别

android - 在android studio中预览水平recyclerview

java - FirebaseDatabase.getInstance().getReference() 到子节点并列出该子节点下的键值对

ios - 为 GLKView 设置着色器的正确位置?

ios - iOS 10 中 A7 设备上的 OpenGL 错误

c - 锁定帧缓冲设备

android - 如何使用闹钟管理器获取工作日的重复闹钟?

android - Opengl ES 2.0 : parts of a model are occluded where they shouldn't. 是 z 缓冲区的错吗?

c# - 如何在 Mono (Mono.Cairo/GTK#) 中访问 Linux 帧缓冲区?

javascript - WebGL 显示帧缓冲区?