|
楼主 |
发表于 2010-5-25 21:50:59
|
显示全部楼层
按照您和zhufu0208 的建议,我将场景节点的增加写在了回调函数中,并且也设置了DYNAMIC标识,调试后发现,出现stl的vector断言错误的频率要小很多,但是偶尔也还是会出现。以下是回调函数及使用回调函数处的代码,不知道有误没。初学OSG,对回调函数的理解还不够,这些代码也是参考论坛上一个帖子修改的,希望给予指点。
回调函数:
-
- class CMyTransformCallback:public osg::NodeCallback
- {
- public:
- CMyTransformCallback(){};
-
- ~CMyTransformCallback(void);
- virtual void operator()(osg::Node *node,osg::NodeVisitor *nv)
- {
- osg::Group *root = new osg::Group;
- root->setDataVariance(osg::Object::DYNAMIC);
- root->addChild(osgDB::readNodeFile("glider.osg"));
- traverse(node,nv);
- }
- };
复制代码
外部调用:
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
osg::ref_ptr<osg::MatrixTransform> transform =new osg::MatrixTransform();
transform->setUpdateCallback(new CMyTransformCallback());
transform->addChild(geode.get());
MFCOSG->GetSceneRoot()->addChild(transform.get()); |
|