c++ 如何为OpenGL添加发光效果?[已关闭]

mccptt67  于 2023-01-18  发布在  其他
关注(0)|答案(4)|浏览(226)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

5年前关闭。
Improve this question
我怎样给我画的线添加发光效果?我使用的是OpenGL for Linux。

gdx19jrr

gdx19jrr1#

你可以实现Nehe Lesson 36上描述的径向模糊效果。主要思想是将绘图渲染为纹理,并在每次渲染后使用小偏移量重复N次,直到绘图准备好复制到帧缓冲区。
我写了一个使用Qt and OpenGL的小演示,你可以看到原始绘图(没有模糊)如下:

下图显示了启用了模糊效果的图形:

我知道这不多,但这是个开始。

gfttwv5a

gfttwv5a2#

我也曾经希望有一个非常简单的解决方案,但不幸的是,它有点复杂,至少对初学者来说。
发光效果的实现方式,无论API(D3D,OpenGL)是与像素/碎片着色器。它通常涉及多个渲染通道,你渲染你的场景,然后渲染一个通道,只有"发光对象"是可见的,然后你应用一个bloom像素着色器,并把它们组合在一起。
有关详细信息,请参见@Valmond提供的链接
编辑:
需要补充的是,这可以通过延迟渲染来实现,在延迟渲染中,法线、位置和其他信息(如"发光标记")被渲染到纹理中,即存储在纹理的不同组件中。然后着色器将从纹理中读取,并在一次通过中进行 lightning 计算和后处理效果,因为它需要的所有数据都可以从渲染的纹理中获得。

kd3sttzy

kd3sttzy4#

如果不使用着色器,你也可以尝试渲染纹理和做一个径向模糊。作为一个起点,看看NeHe-Tutorials

相关问题