osg.ProxyNode是OpenSceneGraph中的一个节点类,用于代理其他节点的存在。
osg.ProxyNode用来代理其他节点的存在,它可以被用来对外暴露一个场景图中的某个节点,同时隐藏其他节点。这个节点的行为就像被它所代理的节点一样,但它们是不同的节点。osg.ProxyNode还可以用来实现延迟加载技术,当场景图中有大量的节点需要加载时,可以将一些节点标记为代理节点,等到需要使用时再通过osgDB::readNodeFile等方法动态地加载。
osg::ref_ptr<osg::Node> node = ...;
osg::ref_ptr<osg::ProxyNode> proxyNode = new osg::ProxyNode;
proxyNode->setLoadingExternalReference(node.get());
osg.ProxyNode定义了几个方法,用于管理它所代理的节点。
设置代理节点,即将要被代理的节点。
获取代理节点。
获取osgDB::Options控制代理节点的加载行为,可以用它来对代理节点设置特定的加载格式、文件名等。
设置代理节点的文件名,用作延迟加载时OSG可以通过它找到代理节点的定义。
获取代理节点文件名。
设置代理节点的数据库路径,用作动态加载时OSG可以通过它找到代理节点的定义。
获取代理节点数据库路径。
osg.ProxyNode可以通过代理其他节点来隐藏实际节点的存在,从而达到一些特殊的效果。
下面的这段代码,将创建两个场景图节点,并将其中一个节点放入osg.ProxyNode中。在程序运行时,只会显示一个场景图节点,而另一个节点是被隐藏的。
osg::ref_ptr<osg::Geode> node1 = new osg::Geode;
node1->addDrawable(new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(), 1.0)));
osg::ref_ptr<osg::Geode> node2 = new osg::Geode;
node1->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(), 1.0)));
osg::ref_ptr<osg::ProxyNode> proxyNode = new osg::ProxyNode;
proxyNode->setLoadingExternalReference(node2.get());
osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild(node1.get());
root->addChild(proxyNode.get());
以上代码创建了两个节点,一个是osg::Sphere,一个是osg::Box,并将osg::Box放入osg.ProxyNode中。在程序运行时,只有osg::Sphere节点被显示,osg::Box节点则被隐藏。