查看: 3864|回复: 8

关于osg加载模型问题,请指教

[复制链接]

该用户从未签到

发表于 2012-2-12 15:46:59 | 显示全部楼层 |阅读模式
本帖最后由 hongwei81 于 2012-2-12 22:37 编辑

刚开始研究,就碰到了一个问题,请过来人指教:
在OSGMFCSDI工程里,我做了如下修改:
void cOSG::InitSceneGraph(void)
{
    // 定义主节点
    mRoot  = new osg::Group;

    // 加载模型
    mModel = osgDB::readNodeFile(m_ModelName);
   //优化模型
    osgUtil::Optimizer optimizer;
        optimizer.optimize(mModel.get());
    optimizer.reset();

        osg:: PositionAttitudeTransform *psTrans = new osg:: PositionAttitudeTransform;
        psTrans->addChild(mModel.get());
        psTrans->setPosition(osg::Vec3d(0.0,0.0,0.0));
        mRoot->addChild(psTrans);
       
//如果注释掉下面四句,下面的addModel函数加载的模型就显示不出来,这就是我纠结的地方
        osg:: PositionAttitudeTransform *psTrans2 = new osg:: PositionAttitudeTransform;
        psTrans2->addChild(mModel.get());
        psTrans2->setPosition(osg::Vec3d(15,0,0));
           mRoot->addChild(psTrans2);
}
然后添加了函数
void cOSG::addModel(double x, double y, double z, std::string name)
{
        osg::ref_ptr<osg::Node> newmodel;
        newmodel = osgDB::readNodeFile(name);
        //优化模型
        osgUtil::Optimizer optimizer;
        optimizer.optimize(newmodel.get());
        optimizer.reset();

        //创建位置节点
        osg:: PositionAttitudeTransform *psTrans = new osg:: PositionAttitudeTransform;
        psTrans->addChild(newmodel.get());
        psTrans->setPosition(osg::Vec3d(x,y,z));


        mRoot->addChild(psTrans);

}
然后在COsgMFCSDIView的函数OnDraw,添加了以下代码:
static int i=0;
        if(i==0)
        {

                if(mOSG)
                        mOSG->addModel(7.5, 0.0, 0.0, "cow.osg");

        }
        i = 1;

COsgMFCSDIView::OnInitialUpdate()函数里,初始化的是axes.osg模型。
问题就是,在最上面函数InitSceneGraph里的最后四句话如果注释掉,就显示不出来加载的牛,请问这是什么原因呢?
非常感谢高手指导。(我把修改后的工程作为附件上传了,是osg2.8.2版本的依赖库)。

OsgMFCSDI.rar

433.03 KB, 下载次数: 109, 下载积分: 威望 1

该用户从未签到

 楼主| 发表于 2012-2-12 18:23:47 | 显示全部楼层
有朋友下载了,能帮忙解决下疑问吗?array,阿威呢?

该用户从未签到

发表于 2012-2-12 20:29:06 | 显示全部楼层
实在看不懂你写的啥
建议你先用命令行测试一下

该用户从未签到

 楼主| 发表于 2012-2-12 21:24:38 | 显示全部楼层
我的意思是您能否把那个附件下载下来,把InitSceneGraph里的后四句隐藏掉,然后我加载的cow.osg就加载不进来,如果没有隐藏就可以阿
这到底是为什么呢?

该用户从未签到

发表于 2012-2-13 09:08:09 | 显示全部楼层
说的真晕乎,估计是初始视点位置的问题吧

该用户从未签到

发表于 2012-2-13 10:12:42 | 显示全部楼层
估计就是一个初始视角的问题,不是没加载是没看到而已

该用户从未签到

 楼主| 发表于 2012-2-13 22:14:28 | 显示全部楼层
我发现了,我定义了两个成员变量,
osg::ref_ptr<osg::Group> m_pSceneRoot;//场景根节点,包括模型,hud,天空盒等等
osg::ref_ptr<osg::Group> m_pModelRoot;//数据根节点(不包括hud、天空盒等等)
想着m_pSceneRoot设置给viewer,挂模型根节点,hud,天空盒等等,m_pModelRoot挂接所有模型,且作为m_pSceneRoot子节点,就发现如果后面加载模型挂到m_pModelRoot就无法加载,,但是如果挂到m_pSceneRoot上就可以,不知道为什么?。

该用户从未签到

发表于 2012-2-14 10:27:45 | 显示全部楼层
你看不到并不能说明没加载,除非你能证明确实没进行加载操作

该用户从未签到

 楼主| 发表于 2012-2-14 10:55:52 | 显示全部楼层
问题是在同一个位置(0,0,0),一个看到,一个看不到,这看不到的肯定没有加载吧。
osg我还是要好好积累,谢谢tianxiao888的支持,您如果有时间可以试下,最多耽误您10分钟。可能确实是我的问题,但是现在认识浅显,希望您的支持和帮助。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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