OSG模型简单控制

转自:http://milkcu.sintune.net/blog/archives/1392673560.html

结点基本操作

添加结点

OSG中使用osg::Nodeosg::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;
}
View Code

相关文章: