gpt4 book ai didi

android - OpenGL ES 2.0 渲染到具有透明背景的纹理

转载 作者:行者123 更新时间:2023-11-29 01:39:34 26 4
gpt4 key购买 nike

我想创建一个可以放在任何东西上的交互式 2D 效果。所以我想采用一种几乎透明的效果,将其渲染为纹理,然后将其放在我想要的任何位置,只需将其放在一个正方形上即可。

我遇到的问题是背景色没法去掉。当我将效果放在一个对象上时,效果的背景颜色会遮挡我想要将效果放在上面的对象。

这是我的代码。谁能告诉我我错过了什么?

绘图:

GLES20.glClearColor(0.6f, 0.34f, 0.14f, 0.0f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);

ball.draw(); //This is the object a simple square draw with 2 triangles
particleSystem.renderToTexture(); //effect rendering to texture and drawing it

渲染到纹理代码代码:

public void renderToTexture(){
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[0]);
GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0, GLES20.GL_TEXTURE_2D, renderTex[0], 0);
GLES20.glFramebufferRenderbuffer(GLES20.GL_FRAMEBUFFER, GLES20.GL_DEPTH_ATTACHMENT, GLES20.GL_RENDERBUFFER, depthRb[0]);
int status = GLES20.glCheckFramebufferStatus(GLES20.GL_FRAMEBUFFER);

drawRender(); //draws the effect on a fbo and saving the texture to renderTex[0]

GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTex[0]);
drawEffect(); //draws a square with the effect texture on it

问题应该出在这里,但我不知道该怎么办。我尝试了我能想到的一切。我什至试图在着色器中处理背景颜色。

最佳答案

发布的代码看起来非常好。您需要确保用于颜色渲染目标 (renderTex[0]) 的纹理具有 alpha 分量。

请注意,ES 2.0 中保证可渲染颜色的纹理格式数量非常有限。仅有的两个具有 alpha 分量(参见规范中的表 4.5)是 GL_RGBA4GL_RGB5_A1。最值得注意的是,这包括每个组件 8 位的 GL_RGBA

因此,为了定义一个具有保证适用于所有 ES 2.0 实现的 alpha 分量的可渲染颜色纹理,您必须使用 GL_RGBA 作为内部格式,和 GL_UNSIGNED_SHORT_4_4_4_4GL_UNSIGNED_SHORT_5_5_5_1 glTexImage2D() 的类型参数。

大多数常见设备(至少我见过的所有设备)都支持 OES_rgb8_rgba8扩展,它增加了对 8 位组件纹理渲染的支持。但是如果你想完全可移植,你应该在使用这些格式的渲染目标之前检查是否存在这个扩展。

关于android - OpenGL ES 2.0 渲染到具有透明背景的纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25624922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com