我尝试着使用两种方式实现,但效果都不太好
第一种方式:
先在一个 FBO 中画一条粉红色的背景线,然后使用高斯模糊,然后在叠加画上白色的线。
这种方式有几个问题:
1. 整个 FBO 使用高斯模糊效率比较低,虽然可以截取最小范围使用高斯模糊,但是没有从根本上解决问题
2. FBO 需要预先有个底色,这样再使用高斯模糊时才会在粉红色的线边沿产生模糊效果,如果想实现绘制在透明的层上,然后在叠加到其他层就有问题了
3. 同一个图层种可能有不同效果的线条,我是每次在全新的 FBO 中模糊一条线,然后再把所有模糊过的线条叠加到另一个 FBO 中上屏,线条多时效率很低,感觉这种方式是不靠谱的
第二种方式:
预先准备一个发光的 1px 宽的纹理,然后在绘制线条时绑定纹理,使用这个纹理填充曲线,使用这种方式在计算纹理坐标映射时遇到了难以解决的问题
1. 我无法避免重叠部分的多次绘制
2. 在有透明度时,会出现透明区域颜色变深的现象。我在 stackoverflow 上专门描述了这个问题
How to use OpenGL to achieve the effect of light curve
我没有计算机图形学的基础,只是突击了一段时间的 OpenGL 使用,对于实现这个效果感觉走在一条错误的道路上,请教各位大神能够指点一二
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.