我正在尝试实现某种混合效果,但未能做到恰到好处:
在这张图片上,您可以在黑色背景上看到 3 条“发光线”。
glBlendFunc(GL_SRC_ALPHA, GL_DST_ALPHA)
用于混合。
然而,这有一个我想摆脱的工件,顺序很明显并且有效果。
如果您仔细观察,您会发现首先渲染了垂直线,因为它被其他人遮挡了,然后渲染了红色。最后你有相当覆盖最后一行,特别是它相当不透明的中心会覆盖所有内容。
目标是有效地获得亮度总和,最亮的部分优先,而不管渲染顺序如何。有没有办法做到这一点?
此外,这是创建一个对象的一部分,然后将其作为一个整体进行渲染,因此可以将所有线条渲染到 FBO,执行魔术(着色器?),然后将 FBO 渲染到场景中。
编辑:用于个人测试;python+pyglet的源代码和发光线纹理:
https://dl.dropbox.com/u/44766482/blendtest.zip
A/D 键循环切换目标模式,W/S 键循环切换源模式。第一行您可以更改图像路径,以在纹理中的透明度和黑色之间进行更改 - 但生成的图像需要实际的透明度而不是黑色。