如何在框架上放置半透明层?

时间:2011-09-24 23:58:48

标签: android opengl-es

通常在为新抽奖清除相框时,会使用glClear()glClearColor()。但是每一个都完全删除了前一帧。

我想逐渐消失帧,即每个新帧都在画布上已经放置了一个半透明的叠加层。我尝试使用glClearColor()的alpha参数,但它似乎没有任何效果。

我应该怎样做才能达到逐渐消失的效果?

1 个答案:

答案 0 :(得分:0)

如果您只想在最后一帧上绘制清晰的颜色而不完全删除它,请在视口上绘制一个屏幕大小的四边形,其颜色与传递给glClearColor的颜色相同,并且跳过调用glClear(GL_COLOR_BUFFER_BIT)(如果你使用其中任何一个,你应该仍然可以清除深度/模板缓冲区)。因此,如果您正在使用深度缓冲区,首先清除深度缓冲区(如果需要),禁用深度测试(这主要是为了确保您的四边形不会更新深度缓冲区),绘制屏幕尺寸四边形,以及然后重新启用深度测试。如果需要,请在之后绘制其他任何内容。

以下内容假设您使用的是OpenGL ES 2.0
如果你需要将两个不同的帧混合在一起并且实际上从未真正看到清晰的颜色,那么你应该将最后一帧渲染到纹理并在新帧上绘制它。为此,您可以读取当前帧缓冲区并将其复制到纹理,或者创建一个新的帧缓冲区并为其附加纹理(请参阅glFramebufferTexture2D)。设置帧缓冲区后,您可以愉快地绘制它。在将帧绘制到纹理后,您可以继续绑定纹理并在屏幕上绘制四边形(记住当然要将帧缓冲区切换回常规帧缓冲区)。

如果您使用的是OpenGL ES 1.1 ,则需要使用glCopyTexImage2D(或glCopyTexSubImage2D)将颜色缓冲区复制到纹理。