如何在框架上添加半透明层



通常在清理画框进行新绘制时,使用glClear()glClearColor()。但每一个都完全移除了前一帧。

我想让帧逐渐消失,即每个新帧在画布上已经有一个半透明的覆盖。我尝试使用glClearColor()的alpha参数,但似乎没有任何效果。

我该怎么做才能达到这种逐渐消失的效果?

如果你只是想在最后一帧上画出清晰的颜色,而不完全摆脱它,在viewport上画一个屏幕大小的四边形,与你传递给glClearColor的颜色相同,并跳过调用glClear(GL_COLOR_BUFFER_BIT)(如果你使用它们中的任何一个,你可能仍然应该清除深度/模板缓冲区)。所以,如果你正在使用深度缓冲,首先清除深度缓冲,如果需要,禁用深度测试(这主要是为了确保你的四边形不更新深度缓冲),绘制屏幕大小的四边形,然后重新启用深度测试。如果需要的话,以后再画。

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

如果你使用的是OpenGL ES 1.1,你会想要使用glCopyTexImage2D(或glCopyTexSubImage2D)来复制颜色缓冲区到纹理。

最新更新