我想创建一个交互式2D效果,我可以放在任何东西上。所以我想采取一种基本透明的效果,将其渲染为纹理,并将其放在任何我想要的地方,只需将其放在方形上即可。OpenGL ES 2.0渲染到具有透明背景的纹理
我遇到的问题是我无法摆脱背景颜色。当我将效果放在对象上时,效果的背景颜色会遮挡我想要放置效果的对象。
这是我的代码。有人可以告诉我我错过了什么吗?
图:
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
的问题应该是这里的某个地方,但我不知道该怎么办。我尝试了所有我能想到的。我甚至愿意在着色器中处理背景颜色。
这看起来很好,所以问题很可能在代码中的其他地方。你用作framebuffer附件('renderTex [0]')的纹理是什么格式?确保您使用带有alpha组件的格式。其他可能的问题可能是用于'renderToTexture()'的清晰颜色,或用于'Drawing()'的片段着色器。 – 2014-09-02 14:20:02
@ReetoKoradi thaaank youu。我非常喜欢这个:GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D,0,GLES20.GL_RGB,texW,texH,0,GLES20.GL_RGB,GLES20.GL_UNSIGNED_SHORT_5_6_5,null); Ofc它没有显示任何透明度 – FaNaT 2014-09-02 15:05:31