查看: 4234|回复: 5

pagedlod setRange动态加载模型问题

[复制链接]

该用户从未签到

发表于 2011-9-6 17:04:56 | 显示全部楼层 |阅读模式
采用pagedlod的方式动态加载3ds模型 ,加载的方式如下:

  1. osg::ref_prt<osg::Group> root=new osg::Group;
  2. osg::ref_prt<osg::Group> models=new osg::Group;
  3. root->addChild(models);
  4. while()
  5. {
  6.   std::string modelName=ps[0];
  7.    float x=atof(ps[1]);
  8.    float y=atof(ps[2]);
  9.    float z=atof(ps[3]);
  10.    osg::ref_ptr<osg::PagedLOD> lod=new osg::PagedLOD;  
  11.    lod->setCenter(osg::Vec3(x,y,z));
  12.    lod->setFileName(0,"F:\\bdf\\data\"+tufu+"\"+modelName);
  13.    lod->setRange(0,0.0,2000);
  14.    models->addChild(lod.get());
  15. }
复制代码



运行之后有一个让我不能理解的地方,我的理解是 当每个pagedlod的中心点与视点的距离在2000以内时,会动态的加载该模型。但是我的程序中却产生了下面的问题,
当我用操纵器处于俯视图状态(从所有模型的顶部查看),如下图

1.png


这样在移动视点的时候,当图中最大的白色的模型进入视点后,即显示出来,
但是当我不采用俯视,而是采用类似CS的漫游方式的时候,如下图
2.png
,当我移动到最大的白色模型的位置时,此时这个模型却不显示,只有当我用操纵器转动使得场景处于俯视图的时候,这个模型才会显
示出来,这个是什么原因呢?这个白色模型的中心点此时与视点的距离已经小于2000. 其他的模型也是如此,只有当处于俯视图的时候
,通过移动视点,模型动态的加载,但是当处于这种类似CS的漫游方式的时候,大部分模型都不会加载,只有位置很近的模型才会加载
。不知道我的表述是否清楚,请问这个可能是什么原因呢?谢谢

该用户从未签到

发表于 2011-9-7 08:42:43 | 显示全部楼层
pagedLOD默认是判断模型包围体的中点与眼睛的距离,我不知道是否您的模型太大,以致您期望看到这个模型的时候,其中点位置仍然较远无法被载入。您可以考虑切分这个模型,或者改变LOD的距离计算方式

该用户从未签到

 楼主| 发表于 2011-9-7 14:14:35 | 显示全部楼层
回复 1# gisbdf


    谢谢array的回复,是这样的,我的每个模型都是单个建筑物,都不是很大,现在的问题是,我用pagedlod的addchild的方式,就不会存在这样的问题,但是用setfilename的时候就会存在这样的问题,
而且setfilename的方式,动态加载起来速度非常的慢。我的模型只有1000个左右,也就是10000个pagedlod节点,所以我怀疑是动态加载太慢的原因,1000个pagedlod加载很慢,会是什么原因呢,谢谢

该用户从未签到

发表于 2011-9-8 09:05:17 | 显示全部楼层
pagedlod节点不能同时并列太多,不然很影响调度的效率。使用四叉树等方法来配置场景的空间索引是更好的选择

该用户从未签到

 楼主| 发表于 2011-9-8 11:01:10 | 显示全部楼层
回复 4# array

非常感谢array的回复,我知道地形处理上一般大规模的采用了比如四叉树LOD的方式,比如vpb , 但是对于海量的场景模型建立四叉树,是不是也是像vpb那样,将模型按照区域进行四叉树的划分,然后树的不同深度对应不同细节层次的模型?  如果是这样的,我感觉对于模型的索引可以更加高效,但是对于渲染我不是很清楚这样能否提高效率(与所有的pagedlod并列在一起相比),或者osg内部采用了何种机制?谢谢

该用户从未签到

发表于 2011-9-13 08:36:20 | 显示全部楼层
对于渲染的效率提升当然是极其显著的,否则vpb这样的地形处理工具也就没有用武之地了,这一点毋庸置疑
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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