查看: 1716|回复: 6

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

[复制链接]

该用户从未签到

发表于 2016-8-29 20:20:14 | 显示全部楼层 |阅读模式
我再添加批量模型时代码如下:                               
                                auto pagedLod = new osg:agedLOD;
                                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又不能给每个模型赋坐标,模型就会堆叠在一起。。。。。。。。:'(:'(

该用户从未签到

发表于 2016-8-30 20:26:07 | 显示全部楼层
                getPageLOD()->setRadius(mBoundSphere.radius());
                getPageLOD()->setCenter(mBoundSphere.center());
                getPageLOD()->setCenterMode(osg:agedLOD::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);的方式并不能给模型指定坐标。
按我对您所说包围盒的理解,只是给整体做了一个包围盒,似乎并不能实现单个模型不同位置的放置~

该用户从未签到

发表于 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也没问题~~~~~
谢谢了!

该用户从未签到

发表于 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()的作用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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