查看: 8356|回复: 17

osgEarth动态地形原理

[复制链接]

该用户从未签到

发表于 2012-12-14 13:40:20 来自手机 | 显示全部楼层 |阅读模式
本帖最后由 ago 于 2012-12-14 19:30 编辑

    简单得讲,osgEarth地形调度采用了plod节点,plod可以引用外部节点,距离条件成立了才会调入;不同于VPB的plod节点,OE引用的外部节点是通过插件自动生成的,VPB是在磁盘上的文件。

    动态调入的节点也包含plod节点,该plod也会带一个外部节点,距离条件成立就调入
........
    随着一层层深入,地形块就变得越来越小,当地形块大小比视点到块的距离还小时,plod的距离条件不再符合,也就不再调入了,这样视点正下方的地形块最小,也就最精细,越远块越大,也就越粗,符合我们的视觉原理,总的块数也不会很多,提高了性能,低配置的计算机也可以运行TB级地形了

    可见OE的地形动态调度的核心还是OSG的plod节点,(地形节点作为plod的子节点,使用了osgTerrain模块),OE优点是开发了很多插件,可以动态从GIS数据(比如DEM,卫星影像)生成地形模型,从而省略了预先生成地形模型的过程,降低了三维地形显示的难度,提高了地形数据的可扩展性; 同时OE增强了GIS矢量数据的支持,可以参数化配置出整个三维数字城市。

该用户从未签到

 楼主| 发表于 2012-12-14 19:35:15 | 显示全部楼层
占座,待续。。。。


  • TA的每日心情
    开心
    2019-11-11 10:36
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2012-12-14 23:58:34 | 显示全部楼层
    支持

    该用户从未签到

    发表于 2012-12-15 23:07:43 | 显示全部楼层
    谢谢ago的帖子,我最近正在看oe地形调度的算法,也知道它是通过osg的pagelod来实现的,想问下,随着级别的不但增加,中间加载的地形块应该要删除吧?那这删除判断的代码在哪进行呢?

    该用户从未签到

    发表于 2012-12-15 23:18:48 | 显示全部楼层
    因为我对着某个区域不断放大,一直放大到23级后,再缩小,在serialkeynodfactory的addtile函数里添加断点发现又重新加载22级的数据,它存储哪些数据呢?只存储前面几级吗?存储多少级呢?

    该用户从未签到

     楼主| 发表于 2012-12-16 14:11:26 | 显示全部楼层
    本帖最后由 ago 于 2012-12-17 08:54 编辑
    caijun2002108 发表于 2012-12-15 23:07
    谢谢ago的帖子,我最近正在看oe地形调度的算法,也知道它是通过osg的pagelod来实现的,想问下,随着级别的不 ...



    客气了

    PLOD子节点的卸载条件,您可以了解一下,我了解到时这样的
    1.不在显示范围内,在内存中只停留一定的时间,超出这个时间就卸载
    2.参考值OSG_MAX_PAGEDLOD,超出这个值,卸载可能会更频繁一些


    该用户从未签到

    发表于 2012-12-17 12:05:51 | 显示全部楼层
    ago,你好,根据OSG_MAX_PAGEDLOD卸载节点的代码我今天看了下,也大致理解了它的作用,但是“1.不在显示范围内,在内存中只停留一定的时间,超出这个时间就卸载”中根据显示范围判断,我在dababasepager中没看到相关代码,这个是在哪执行呢?

    该用户从未签到

     楼主| 发表于 2013-1-10 21:40:37 | 显示全部楼层
    caijun2002108 发表于 2012-12-17 12:05
    ago,你好,根据OSG_MAX_PAGEDLOD卸载节点的代码我今天看了下,也大致理解了它的作用,但是“1.不在显示范围 ...


    实现在DatabasePager类的removeExpiredSubgraphs函数

    该用户从未签到

    发表于 2013-1-10 22:08:03 | 显示全部楼层
    好贴,学习啦!
    加载和卸载节点其实是由OSG的pagedlod来管理的,osgEarth只是按瓦片方式利用pagedlod来组织地球的各级节点。
    这就带来一个问题,如果想要人为控制某些节点会比较麻烦,因为随着场景的变化,节点随时都在加载和卸载中。我想要控制某些区域的节点按我的需要进行刷新,一直没有实现。

    该用户从未签到

     楼主| 发表于 2013-1-11 18:16:10 来自手机 | 显示全部楼层
    x_wp 发表于 2013-1-10 22:08
    好贴,学习啦!
    加载和卸载节点其实是由OSG的pagedlod来管理的,osgEarth只是按瓦片方式利用pagedlod来组织 ...

    是啊,卸载后重新加载会刷新之前做的修改,不过,你可以修改地面后先保存起来,再加载就会保留修改了

    该用户从未签到

    发表于 2013-1-16 13:06:41 | 显示全部楼层
    "同时OE增强了GIS矢量数据的支持,可以参数化配置出整个三维数字城市"
    这种自动化生成的数字城市由于建筑物过多,OE会将具有相同stateset的屋顶与屋顶进行合并,墙体与墙体进行合并,从而破坏了建筑的独立性,通过点击查询建筑属性时就不行了。而如果不合并,drawable会过多而影响效率,谁有更好的办法解决这个问题?

    该用户从未签到

    发表于 2013-1-16 14:59:55 | 显示全部楼层
    victording 发表于 2013-1-16 13:06
    "同时OE增强了GIS矢量数据的支持,可以参数化配置出整个三维数字城市"
    这种自动化生成的数字城市由于建筑物 ...

    就是,不知你有啥办法没有

    该用户从未签到

    发表于 2013-1-17 09:38:38 | 显示全部楼层
    暂时想到的办法是,为每个建筑建立包围盒,用包围盒做拾取操作,即渲染和功能分开。

    该用户从未签到

    发表于 2013-7-14 17:05:13 | 显示全部楼层
    ago 发表于 2012-12-14 19:35
    占座,待续。。。。

    多少钱?

    该用户从未签到

    发表于 2013-7-30 09:13:45 | 显示全部楼层
    占个座。

    该用户从未签到

    发表于 2013-7-30 10:11:28 | 显示全部楼层

    该用户从未签到

    发表于 2015-4-2 21:51:47 | 显示全部楼层
    请问,计算当前级别,以及判断当前所需的瓦片的代码在哪里啊 啊  谢谢

    该用户从未签到

    发表于 2015-4-27 13:09:34 | 显示全部楼层
    ago 发表于 2013-1-11 18:16
    是啊,卸载后重新加载会刷新之前做的修改,不过,你可以修改地面后先保存起来,再加载就会保留修改了

    ago,我做的地形编辑功能,就是这样的,编辑后先把Tile保存起来,然后需要加载时,在加载。
    这样确实做到地形的修改功能。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

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

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

    联系我们

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