|
本帖最后由 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版本的依赖库)。 |
|