奇怪的粒子表现
Amber-372 opened this issue · comments
感谢提问,我在调试程序的时候也发现了这些问题,原作者的仓库中也有人询问,但迟迟没有解决这一问题。
- 在地图放大到很大的时候,会出现奇怪的白色片状。
- 是的,我也察觉到了,奇怪的片状会出现在速度为零的区域,我猜测可能是在绘制粒子片元时采用的"miter joint"算法导致的异常。
原作者在issues中谈到了片元绘制的算法,作者后来使用了新的Drawing Lines with WebGL方法来绘制片元,我查看代码时发现这种绘制方法,在速度为零处以及粒子头部的片元长度会产生异常,具体可能会产生异常的代码在segementDraw.vert第100行。
- 关于涡旋
- 构建涡旋只是为了测试自建json数据加载的可行性,在拟真程度上只是个玩具。
- 真实涡旋的垂直纵深太小,为了看到明显的可视化效果,我极大地放大了它的垂直高度。
- 因为我在构造涡旋时,只能采用lon*lat长宽的棋盘格,因此在椭圆以外区域将UVW速度都设置成了零。而速度为零的区域会出现奇怪的多边形,问题又回到了最开始。
- 在不同机器上的显示效果不一样,在我的笔记本(R5 4600U集显 60hz)上,看不到这些奇怪的多边形;但是在我的台式机上(RTX 2060 144hz)上则和你的截图一样明显。问题待查。。
假如说这是由于区域速度为零造成的,那么我们可以在segmentDraw.frag中不显示速度为零的粒子,但我修改后,证明无效。
此外从涡旋场边缘的奇异多边形的颜色可以发现,这些多边形的速度并不为零。因此我猜测,造成这种现象的原因是原作者RaymanNg采用的RungeKutta插值方式,将速度为零区域也进行了插值,代码在calulateSpeed.frag第117行。
由于我比较懒,长时间没能解决这个问题,颇为惭愧。
@hongfaqiu 感谢你的回复呀。那个白色片状的现象,我有用原作者的代码测试下,一开始,我测试他的代码没有这个问题,后面我发现他在某些viewerContainer长宽比下正常,某些长宽比会出现这种白色片状,这让我觉得很奇怪。但是我没办法定位到真正的原因。
hello兄弟,片状雪花的出现确实和Miter Joint算法有关,我将它退化成普通的Web GL画四边形的方法就好了,效果可以看我的demo。
但是我偷了懒,只是把顶点着色器中的代码注释了一部分,因为从理论上来讲,Miter Joint算法确实更优,后面有空我再看看能不能改进吧。
片状雪花我这边也发现了这个问题,请问您这边最后怎么解决的?