我尝试着使用两种方式实现,但效果都不太好
第一种方式:
先在一个 FBO 中画一条粉红色的背景线,然后使用高斯模糊,然后在叠加画上白色的线。
这种方式有几个问题:
1. 整个 FBO 使用高斯模糊效率比较低,虽然可以截取最小范围使用高斯模糊,但是没有从根本上解决问题
2. FBO 需要预先有个底色,这样再使用高斯模糊时才会在粉红色的线边沿产生模糊效果,如果想实现绘制在透明的层上,然后在叠加到其他层就有问题了
3. 同一个图层种可能有不同效果的线条,我是每次在全新的 FBO 中模糊一条线,然后再把所有模糊过的线条叠加到另一个 FBO 中上屏,线条多时效率很低,感觉这种方式是不靠谱的
第二种方式:
预先准备一个发光的 1px 宽的纹理,然后在绘制线条时绑定纹理,使用这个纹理填充曲线,使用这种方式在计算纹理坐标映射时遇到了难以解决的问题
1. 我无法避免重叠部分的多次绘制
2. 在有透明度时,会出现透明区域颜色变深的现象。我在 stackoverflow 上专门描述了这个问题
How to use OpenGL to achieve the effect of light curve
我没有计算机图形学的基础,只是突击了一段时间的 OpenGL 使用,对于实现这个效果感觉走在一条错误的道路上,请教各位大神能够指点一二