查看: 2162|回复: 7

pagedLOD的一点疑问

[复制链接]

该用户从未签到

发表于 2010-10-9 22:12:55 | 显示全部楼层 |阅读模式
for (int i=0;i<4;i++)
{
  osg::ref_ptr<osg:agedLOD>page=new osg::PagedLOD;
  page->setRangeMode(osg::PagedLOD::RangeMode:ISTANCE_FROM_EYE_POINT);
  char a[10];
  string str,name;
  itoa(i, a, 10);
  str = a;
  name=str+".ive";
  page->setFileName(0,name);
  page->setRange(0,0.0,5000.0);

  root->addChild(page.get());
}

请问一下为什么看不到加进来的物体,如果用node是可以看到?

该用户从未签到

发表于 2010-10-10 02:22:19 | 显示全部楼层
你没有设置中心点和半径  程序不知道什么时候加载模型

该用户从未签到

 楼主| 发表于 2010-10-10 10:30:57 | 显示全部楼层
非常感谢zhufu208 的回答
for (int i=0;i<4;i++)
{
  osg::ref_ptr<osg:agedLOD>page=new osg:agedLOD;
  page->setRangeMode(osg:agedLOD::RangeMode:ISTANCE_FROM_EYE_POINT);
  char a[10];
  string str,name;
  itoa(i, a, 10);
  str = a;
  name=str+".ive";
  page->setFileName(0,name);
  page->setRange(0,0.0,5000.0);

osg::ComputeBoundsVisitor visitor;
                pagedLod->accept(visitor);
                osg::Vec3 center=visitor.getBoundingBox().center();
                pagedLod->setCenter(center);
                pagedLod->setRadius(1000.0);
       
  root->addChild(page.get());
}

这样也还是不行,请指点一下

该用户从未签到

发表于 2010-10-11 08:36:18 | 显示全部楼层
首先一个可能更严重的问题是:您是如何定义PagedLOD在您的程序中的作用的?我看到您的四个PagedLOD节点都只有一个子节点?您不准备表达不同层次的物体精细程度?
  1. osg::ComputeBoundsVisitor visitor;
  2. pagedLod->accept(visitor);
  3. osg::Vec3 center=visitor.getBoundingBox().center();
复制代码
这一段并不能取得PagedLOD的中心位置,因为它实际上并没有子节点,而仅仅是设置了“未来可能从文件中加载子节点”。通常情况下您应当是已知PagedLOD中心位置和半径的前提下对它进行设置的

该用户从未签到

 楼主| 发表于 2010-10-13 16:10:11 | 显示全部楼层
"我看到您的四个PagedLOD节点都只有一个子节点?您不准备表达不同层次的物体精细程度?"
是的。我想如果在可视范围就能看到,如果不在就什么也没有。

请问一下在初始的时候所有的pagedlod节点都会加入内存吗?

该用户从未签到

发表于 2010-10-13 17:11:43 | 显示全部楼层
不会,而是会根据节点中心与视点的远近程度来动态加载,并且适时卸载

该用户从未签到

 楼主| 发表于 2010-10-14 15:42:46 | 显示全部楼层
谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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