查看: 3675|回复: 12

关于读取高程值问题

[复制链接]

该用户从未签到

发表于 2011-6-4 21:20:03 | 显示全部楼层 |阅读模式
基本的数据是下载的ps_height_16k这个数据,原本的数据是png格式的,然后按照vpb生成地形文件的那个基本步骤(flysky书中有写过)采用gdal分别对纹理和高程文件进行处理生成了tiff文件。然后在生成ive模型。
现在碰到的问题是需要大量的查询高程值,但是采用射线求交的方法已经不能实时满足如此大量的查询。(10W次/秒级别)
现在的问题是如何才能更快的查询高程,看到论坛里大致的搜了一下帖子。。都说用gdal去读取高程数据,但是在网上查了一下并没有发现类似的东西。。
所以,求大神们指点一下!现在读取高程部分已经成为瓶颈,导致程序不能理想的运行!!
谢谢各位!如果采用gdal去读取的话,能不能给个类似的例子?

该用户从未签到

发表于 2011-6-4 21:23:58 | 显示全部楼层
这么频繁的查询,估计也没有太好的办法吧。怎么会这么高频率呢?

该用户从未签到

发表于 2011-6-4 21:24:14 | 显示全部楼层
这么频繁的查询,估计也没有太好的办法吧。怎么会这么高频率呢?

该用户从未签到

 楼主| 发表于 2011-6-4 21:29:04 | 显示全部楼层
这么频繁的查询,估计也没有太好的办法吧。怎么会这么高频率呢?
oman 发表于 2011-6-4 21:24

有这么个需求。。我也觉得查询量比较大。。就是稍微在小一些,用射线求交的方法貌似也还是有些慢。。所以问问,有没有更好的办法。。

该用户从未签到

发表于 2011-6-4 21:54:24 | 显示全部楼层
蛋哥,哈哈

该用户从未签到

发表于 2011-6-5 11:23:39 | 显示全部楼层
如果真有这样的需求,恐怕重新考虑方法了,否则场景都卡的动不了

该用户从未签到

 楼主| 发表于 2011-6-5 15:41:15 | 显示全部楼层
如果真有这样的需求,恐怕重新考虑方法了,否则场景都卡的动不了
gis_wudi 发表于 2011-6-5 11:23

恩。。所以,发帖请教啊。。求方法!!

该用户从未签到

发表于 2011-6-7 08:52:49 | 显示全部楼层
尝试回答下:
1  gdal读取高度方法:
        osgDB::Registry::instance()->getReaderWriterForExtension("gdal");
        osg::ref_ptr<osg::HeightField> hf = osgDB::readHeightFieldFile("topo.asc");
    HeightField中有获得高度的函数,还有栅格的位置等信息
    然后作为Drawable添加到叶子节点。
  2  根据你的描述,地形不大,我觉得不需要生成lod那样的多分辨率地形,所以直接读取地形就可以了。这样,
  HeightField->getHeight(),就可以获得高度了。我读取的是 *.asc文件,不知道你的行不行,如果不行,你用global_mapper转换一下。在*.asc中,高度都是知道的。所以就不需要射线求教了。
3  编译gdal插件的方法:重新cmake下osg工程,下载gdal

最后如果是实在不行,你就先保存下载,读到一个文件里,然后预先加载。

该用户从未签到

 楼主| 发表于 2011-6-7 12:22:02 | 显示全部楼层
尝试回答下:
1  gdal读取高度方法:
        osgDB::Registry::instance()->getReaderWriterForExtensio ...
CWorld 发表于 2011-6-7 08:52

师兄啊。。2K×2K的,然后,如果不用lod的话,貌似得全部加载进去吧。。自己去控制的话,貌似不是很方便啊。。在继续做做看看,如果不行,那就不用lod了,然后后续工作也好做。。。

该用户从未签到

发表于 2011-6-7 14:23:25 | 显示全部楼层
本帖最后由 CWorld 于 2011-6-7 14:25 编辑

2k*2k是什么意思? 2000*2000米吗? 我自己用的那个地形是:222*224, 每个格子是25,算出来就是:200*25=5000,5k*5k,应该比你的都大呢。你的每个格子大小多大? 如果是和我一样的,200*200*sizeof(float*3)=480000个字节=468KB,我觉得不大吧, 你自己根据情况看吧!

该用户从未签到

 楼主| 发表于 2011-6-9 21:14:32 | 显示全部楼层
额,恢复后,果然少了好多条回复。。
师兄,我的是2W×2W的分辨率的。。貌似要比你的那个大接近10000倍。。

该用户从未签到

发表于 2012-8-11 01:29:46 | 显示全部楼层
CWorld 发表于 2011-6-7 08:52
尝试回答下:
1  gdal读取高度方法:
        osgDB::Registry::instance()->getReaderWriterForExtensio ...

请问,HeightField能作为一个drawable加到geode中吗?我看了下CHM,感觉不行啊!

该用户从未签到

发表于 2012-8-14 16:06:57 | 显示全部楼层
HeightField是一个Shape,可以作为ShapeDrawable的子对象,而后者是一种drawable
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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