图像效果后发光 - 如何在渲染后保存发光渲染缓冲区

Posted

技术标签:

【中文标题】图像效果后发光 - 如何在渲染后保存发光渲染缓冲区【英文标题】:Glow after image effect - how to save glow render buffer after render 【发布时间】:2012-10-04 13:25:46 【问题描述】:

我像 inhttp://http.developer.nvidia.com/GPUGems/gpugems_ch21.html 那样实现发光 现在我想为发光部分实现后像效果,所以它们会形成轨迹,就像文章的 21.5.4 后像效果部分中所述。

我的方法是在水平和垂直绽放后将发光纹理传递到另一个帧缓冲区(trail holder),并根据当前trail 使用修改过的 alpha 颜色渲染发光纹理四边形以实现淡出效果count(我们已经渲染到 trail holder 的次数),然后将 trail holder 纹理与当前帧最终图像混合。所以我们在之前的精灵位置得到了一系列发光的部分。 如果 trail count == ma​​x trail size,则清除 trail holder。

问题是如何避免清洁痕迹保持器缓冲区,即使我通过了所有痕迹计数检查并且

//glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//glClearColor(...);  

它不会保存有关先前渲染的信息。

附:即使没有任何缓冲区和绽放,如果只是移动并绘制到默认缓冲区纹理四边形并且不清除任何它将在黑屏上移动的东西,我认为它必须自己跟踪图像,因为我们不清除任何东西。 为什么以及如何解决它? OpenGL ES 2.0 和桌面 OpenGL 的问题似乎很笼统。

【问题讨论】:

【参考方案1】:

我建议您在屏幕外帧缓冲区对象中渲染绑定为颜色附件的一堆纹理。然后通过在渲染到屏幕帧缓冲区的后处理步骤中组合纹理层来创建发光效果。

通过使用帧缓冲区对象,您可以在您寻求的清除操作上实现隔离。

【讨论】:

好吧,使用 1 个带有多种颜色附件的 FBO,听起来很合理。我试图找到如何在 GL_COLOR_ATTACHMENT0 .. N 之间切换,但找不到任何东西。 1 行示例,好吗? 思路不是使用多个颜色附件,而是在颜色附件0上切换目标纹理。

以上是关于图像效果后发光 - 如何在渲染后保存发光渲染缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

3dmax渲染优化发光图中最小速率和最大速率的优化应用

需要一些手来渲染、显示和保存图像

webgl智慧楼宇发光效果算法系列之高斯模糊

如何将图像后处理着色器的结果添加到场景中

Unity Shader 屏幕后效果——Bloom外发光

输入框点击后发光颜色的设置