如何为 OpenGL 的线条添加发光效果? [关闭]
Posted
技术标签:
【中文标题】如何为 OpenGL 的线条添加发光效果? [关闭]【英文标题】:How to add glowing effect to a line for OpenGL? [closed] 【发布时间】:2011-11-28 09:30:36 【问题描述】:如何为我绘制的线条添加发光效果?我正在使用适用于 Linux 的 OpenGL。
【问题讨论】:
这通常称为“添加bloom”,以帮助您进行搜索。如何做到这一点有一个很好的部分here 发光效果的总结也很棒here 【参考方案1】:您可以实现Nehe Lesson 36 中描述的径向模糊效果。主要思想是将绘图渲染为纹理,并在每次渲染后使用小的偏移量执行 N 次,直到绘图准备好复制到帧缓冲区。
我编写了一个使用Qt and OpenGL 的小演示。您可以在下面看到原图(没有模糊):
下一张图片显示了开启了模糊效果的绘图:
我知道这并不多,但这是一个开始。
【讨论】:
【参考方案2】:我也曾经希望有一个非常简单的解决方案,但不幸的是它有点复杂,至少对于初学者来说。
现在实现发光效果的方式,无论 API(D3D、OpenGL)是使用像素/片段着色器。它通常涉及渲染场景的多个渲染通道,然后渲染只有“发光对象”可见的通道,然后应用绽放像素着色器并将它们组合在一起。
详情请查看@Valmond 提供的链接
编辑:
应该补充一点,这可以通过延迟渲染来实现,其中法线、位置和其他信息(如“发光标志”)被渲染到纹理,即存储在纹理的不同组件中。然后着色器将从纹理中读取并在单次通过中进行闪电计算和后处理效果,因为它需要的所有数据都可以从该渲染纹理中获得。
【讨论】:
【参考方案3】:看看这个:http://developer.download.nvidia.com/books/html/gpugems/gpugems_ch21.html
它很容易解释如何制作发光效果。
【讨论】:
这并没有解释太多关于如何做到这一点。它只是谈论过程而不是实际的实施【参考方案4】:不使用着色器,您也可以尝试渲染到纹理并进行径向模糊。 作为起点,请查看NeHe-Tutorials。
【讨论】:
以上是关于如何为 OpenGL 的线条添加发光效果? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 OpenGL ES 2.0 中获得“发光”着色器效果?