查看: 1347|回复: 6

关于绘制线条的帧率问题

[复制链接]

该用户从未签到

发表于 2014-4-12 08:45:34 | 显示全部楼层 |阅读模式
我现在有一个帧率的问题困扰了很久。我可以直接将需求说具体一些:
我现在需要在地表绘制大量矢量线(z-Fighting的问题暂不考虑),矢量线的数据源是shp文件,具体来说,就是大量的行政区域线,由上百万个点构成的多段线。
通常,绘制这样的东西,应该使用LineStrip来完成,这是不会面临什么性能问题的。但是需求问题,导致我不能使用LineStrip。因为这些线需要使用PagedLOD进行调度。
比如说,一个省的行政边界线,由10000个点构成的闭合多边形,那么,我没有使用一个Geometry来绘制这些多段线,而是将它规划为一个Group,下属10000个PagedLOD,每一个PagedLOD下面,只有多段线的一段或者相邻的几段。这样可以换取一个好处,就是顺着边境线浏览的时候,线是一段一段的调度出来的。

PagedLOD的一个很郁闷的问题是,它计算视距是以地物的中心点为参考的,对于一个省份边界线这么大的一个闭合多边形,它的中心点肯定在中间,那么视点在边界地带的时候,反而看不到线(实际是,视点在任何位置都看不到线,熟悉PagedLOD的朋友肯定知道原因,我不多说)。

显然,我这样做要面临极大的性能开销,CullTraverse的时候将非常慢,上万个PagedLOD,每一个PagedLOD下面只有一个RangeChild,每一个RangeChild下面又只有一个Geometry,一个Geometry下面只有一两段短短的线段,这的确是暴殄天物。

我考虑过将这些矢量线变成纹理贴图,贴在地表上,但是那样就无法做鼠标点选了(除非命中测试放在二维里头做),用户需要能够点选这些矢量线。

那么各位,有什么办法来解决需求和性能之间的矛盾呢?谁有这方面的经验?

该用户从未签到

发表于 2014-4-12 19:00:28 | 显示全部楼层
动态采样绘制

该用户从未签到

 楼主| 发表于 2014-4-12 19:56:03 | 显示全部楼层
能说具体一些么?

该用户从未签到

发表于 2014-4-17 10:29:30 | 显示全部楼层
LOD绘制,osgEarth支持shp矢量数据的LOD优化绘制

矢量的精度逐级递增,osgEarth实现了和Goolge Earth矢量显示类似的效果;
当范围小时,精度高也不会绘制太多东西

该用户从未签到

发表于 2014-4-20 20:44:43 | 显示全部楼层
“比如说,一个省的行政边界线,由10000个点构成的闭合多边形,那么,我没有使用一个Geometry来绘制这些多段线,而是将它规划为一个Group,下属10000个PagedLOD”
我认为这里就是您的问题,您为什么不直接用一个Geometry来绘制它们?两者的效率差距简直是天上地下。至于数据的管理和选择,本来就可以另外建立自己的结构来实现,不需要完全依赖osg的节点。

该用户从未签到

 楼主| 发表于 2014-4-26 14:31:36 | 显示全部楼层
"至于数据的管理和选择,本来就可以另外建立自己的结构来实现,不需要完全依赖osg的节点"
非常赞成!我正在往这个方向想办法。

至于我前面为什么要创建那么多的Geometry,其实我很清楚瓶颈就在这里,但是我要满足一个需求:“线状地物,需要一节一节的调度出来”。而PagedLOD是根据物体的中心点来计算淘汰的,我若将多段线的所有节都合并成一个Geometry,一个长长的边境线,势必导致PagedLOD无法对它正确调度,无法满足需求。

这是一个非常痛苦的事情。我现在就是想不出一个两全其美的办法。

该用户从未签到

发表于 2014-5-4 23:44:45 | 显示全部楼层
“我若将多段线的所有节都合并成一个Geometry”
不需要合并成一个,把10w个合并成1000个,效率的提升也是上百倍的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表