雨落无声 发表于 2016-8-29 20:20:14

pagedLod如何设置单个模型的位置坐标

我再添加批量模型时代码如下:                               
                              auto pagedLod = new osg::PagedLOD;
                                unsigned int childNo = 0;
                                for (std::vector<std::string>::const_iterator file = filePaths.begin(); file != filePaths.end(); ++file)
                                {
                                        pagedLod->setFileName(childNo, *file);
                                        pagedLod->setRange(childNo, modelParameter->MinVisibleRange, modelParameter->MaxVisibleRange);
                                        childNo++;
                                }
但是这种方法不能给每个模型添加坐标位置~
我加载的模型都是.x的,如何给每个模型添加独立的坐标位置呢?还请大神不吝赐教~

雨落无声 发表于 2016-8-29 20:23:29

模型自身是不带坐标的,但是有文档记录了每个模型的坐标,不采用pagelod模型一到几百个就卡死了,采用pagelod又不能给每个模型赋坐标,模型就会堆叠在一起。。。。。。。。:'(:'(:'(

rpgpp 发表于 2016-8-30 20:26:07

                getPageLOD()->setRadius(mBoundSphere.radius());
                getPageLOD()->setCenter(mBoundSphere.center());
                getPageLOD()->setCenterMode(osg::PagedLOD::USER_DEFINED_CENTER);

设置一个自定义的包围盒就OK了,包围盒进入视角范围就会加载你的模型

雨落无声 发表于 2016-8-31 08:43:31

rpgpp 发表于 2016-8-30 20:26
getPageLOD()->setRadius(mBoundSphere.radius());
                getPageLOD()->setCenter(mBoundSphere.center()); ...

@rpgpp多谢您的指导,但是这样好像并不能给每个模型指定不同的坐标吧- -
我是想同一个PagedLod节点下的每个模型(本身无坐标信息)通过指定坐标放在不同位置,
现在通过pagedLod->setFileName(childNo, *file);的方式并不能给模型指定坐标。
按我对您所说包围盒的理解,只是给整体做了一个包围盒,似乎并不能实现单个模型不同位置的放置~

rpgpp 发表于 2016-8-31 11:51:48

雨落无声 发表于 2016-8-31 08:43
@rpgpp多谢您的指导,但是这样好像并不能给每个模型指定不同的坐标吧- -
我是想同一个PagedLod节点下 ...

一个group挂接多个pagedlod就可以了:)

雨落无声 发表于 2016-8-31 16:21:01

rpgpp 发表于 2016-8-31 11:51
一个group挂接多个pagedlod就可以了

我在贴吧看着有人说pagedlod有数量限制,不敢这样用,我就这样被骗了么- -
测试了一下发现一个group挂很多pagedlod也没问题~~~~~
谢谢了!

xunboqian 发表于 2017-3-15 21:31:28

             您好,能帮我看一下我这段代码的问题吗,模型位置设置不对
      osg::ref_ptr <osgViewer::Viewer>viewer = new osgViewer::Viewer;
      osg::ref_ptr <osg::Group>root = new osg::Group;

      osg::ref_ptr <osg:agedLOD >page1 = new osg:agedLOD;
      osg::ref_ptr <osg:agedLOD >page2 = new osg:agedLOD;
      
      page1->setCenter(osg::Vec3(-100, 0, 0));
      page1->setFileName(0, "cow.osg");
      page1->setRange(0, 0, 20000);
      
      page2->setCenter(osg::Vec3(100, 0, 0));
      page2->setFileName(0, "spaceship.osgt");
      page2->setRange(0, 0, 20000);

      root->addChild(page1.get());
      root->addChild(page2.get());
      osgUtil::Optimizer optimizer;
      optimizer.optimize(root.get());
      viewer->setSceneData(root.get());
      return viewer->run();

运行程序后,模型cow和spaceship总是粘在一起,完全感觉不到setCenter()的作用
页: [1]
查看完整版本: pagedLod如何设置单个模型的位置坐标