查看: 1834|回复: 4

osg场景简化问题及天空盒问题

[复制链接]

该用户从未签到

发表于 2013-3-10 07:25:30 | 显示全部楼层 |阅读模式
本帖最后由 1162810317 于 2013-3-10 19:23 编辑

1,场景越来越大,机器越来越卡,所以想问问各位大神应该怎么处理,,,,,,昨天想通过nodevisitor遍历所以节点,再通过LOD设置每个节点的视距,但不知为什么程序出错了,不知道是不是遍历和LOD的逻辑顺序不对。然后想设置imposter,,,,,不知怎么弄,,,,
上代码吧:
int main()
{
  osgViewer::Viewer viewer ;  
  osg::Node* node = osgDB::readNodeFile("school2.ive") ;
  nodeVisitor nv;//自己改下的类
  node->accept (nv);
osg::ref_ptr<osgSim::Impostor> impostor=new osgSim::Impostor;
    //设置50.0f之后开始使用贴图
    impostor->setImpostorThreshold(50.0f);
    //设置模型的显示范围在0-10000内
    impostor->addChild(nv.getNode (),0,100.0f);

  viewer.setSceneData(impostor.get ()) ;  
   // osgDB::writeNodeFile(*(viewer.getSceneData()), "free.osg", osgDB::Registry::instance() ->getOptions());  
  viewer.realize ();
  viewer.run ();
  return 0 ;
} 程序编译通过,运行出错,不知道为什么!求大神指点!!!!!

2,天空盒问题。看到一篇帖子说天空盒的图片必须要经过3dmax特殊处理才能用?????对此有些疑问??此外不知道为什么,昨天我调试的时候,程序中给了图片(没经过处理)的绝对地址,编译能成功,但运行时程序告诉你找不到图片,显示的是白茫茫的一片,想问下大神们怎么解决??????、谢谢!

该用户从未签到

发表于 2013-3-11 09:37:11 | 显示全部楼层
1. 您什么条件都没有给出,比如运行堆栈信息,还有您自己那个nodeVisitor的内容
2、没听说过必须特殊处理,运行时找不到图片可能是文件读取插件没有找到或者没有编译出来

该用户从未签到

 楼主| 发表于 2013-3-11 18:04:19 | 显示全部楼层
array 发表于 2013-3-11 09:37
1. 您什么条件都没有给出,比如运行堆栈信息,还有您自己那个nodeVisitor的内容
2、没听说过必须特殊处理, ...

QQ截图20130311180149.jpg
谢谢arry大神,天空盒装了插件后就解决了,然后那个场景简化的话我把代码和错误贴出来,
class nodeVisitor : public osg::NodeVisitor
{
public:  
  //所有的顶点
        osg::ref_ptr<osg::Node>  childrenNode;
        int count;//统计节点总数
  //构造函数,选择向下遍历全孩子的方式
  nodeVisitor() : osg::NodeVisitor(osg::NodeVisitor ::TRAVERSE_ALL_CHILDREN)
  {
          childrenNode = new osg::Node;
         count=0;
  }
  //apply
  void apply( osg::Node& node )
  {
   
        {
                //std::cout<<node.getName ()<<std::endl;  
                 _node = &node;
                count++;

        }
       traverse( node);
  }
  osg::Node* getNode(){ return _node.get();}
protected:

osg::ref_ptr<osg::Node>  _node;


};
//主函数
int main()
{
  osgViewer::Viewer viewer ;  
  osg::Node* node = osgDB::readNodeFile("school2.ive") ;
  nodeVisitor nv;
  node->accept (nv);
osg::ref_ptr<osgSim::Impostor> impostor=new osgSim::Impostor;
    //设置50.0f之后开始使用贴图
    impostor->setImpostorThreshold(50.0f);
    //设置模型的显示范围在0-10000内
    impostor->addChild(nv.getNode (),0,100.0f);
  viewer.setSceneData(impostor.get ()) ;  
   // osgDB::writeNodeFile(*(viewer.getSceneData()), "free.osg", osgDB::Registry::instance() ->getOptions());  
  viewer.realize ();
  viewer.run ();
  return 0 ;
}

该用户从未签到

发表于 2013-3-11 20:32:14 | 显示全部楼层
ls的重试一下,然后看看短在什么位置,vector的迭代器没有增加?这个问题应该好调试啊~

该用户从未签到

 楼主| 发表于 2013-3-11 21:28:17 | 显示全部楼层
本帖最后由 1162810317 于 2013-3-11 22:00 编辑
Gooogle 发表于 2013-3-11 20:32
ls的重试一下,然后看看短在什么位置,vector的迭代器没有增加?这个问题应该好调试啊~


没有啊,我觉得不要用那个吧,所以就删掉了,那个用来干嘛的,用来储存节点的吗????,,,就是不知道哪里出问题了,貌似定位不到,,,,我怀疑是不是我程序写的有问题,或是什么逻辑不对,我也没看过具体的设置每个节点的代码,就按自己的理解写的,还有那样设置节点的视距会不会有问题啊???。。。。还有一个人也碰到这样的问题,不一样的代码,一样的错误提示,找不到在哪出错,如果知道在哪可能会好点吧???谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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