转自:http://milkcu.sintune.net/blog/archives/1392673560.html
结点基本操作
添加结点
OSG中使用osg::Node和osg::Group装载模型,Node是Group的父类。
可以通过下面代码再场景中显示多个模型:
#include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osg/Node> int main(void) { osgViewer::Viewer viewer; osg::Group * root = new osg::Group(); root->addChild(osgDB::readNodeFile("glider.osg")); root->addChild(osgDB::readNodeFile("osgcool.osgt")); viewer.setSceneData(root); viewer.realize(); viewer.run(); return 0; }
默认时两节点是加在场景的中间。
那为什么飞机会在左边呢?
为什么牛会把其他模型覆盖掉呢?
组结点
如果想在原结点中添加点什么,就需要把原结点作为组结点。
可以使用下面代码再飞机结点中再添加一些东西。
删除结点
可以通过removeChild和removeChildren方法删除结点,需要的参数为索引值或结点本身的指针。
可以通过下面代码实现指定结点的删除:
#include <osgDB/ReadFile> #include <osgViewer/Viewer> #include <osg/Node> int main(void) { osgViewer::Viewer viewer; osg::Group * root = new osg::Group(); root->addChild(osgDB::readNodeFile("osgcool.osgt")); osg::Node * glider = osgDB::readNodeFile("glider.osg"); root->addChild(glider); root->addChild(glider); root->removeChild(glider); root->removeChild(glider); viewer.setSceneData(root); viewer.realize(); viewer.run(); return 0; }