osg重载apply
时间: 2023-10-13 09:05:43 浏览: 39
在OpenSceneGraph(osg)中,apply方法是定义在osg::NodeVisitor类中的,并且根据不同的节点类型进行了重载。重载后的apply方法统一调用了traverse方法,而traverse方法在不同的类中实现也不一样。
具体来说,apply方法可以被osg::NodeVisitor的子类重写覆盖,并且可以加入不同的业务逻辑。在osg::NodeVisitor类中,apply函数的定义如下:
```cpp
void NodeVisitor::apply(Node& node)
{
traverse(node);
}
void NodeVisitor::apply(Drawable& drawable)
{
apply(static_cast<Node&>(drawable));
}
```
在osg::Group类中实现了traverse方法,其定义如下:
```cpp
void Group::traverse(NodeVisitor& nv)
{
for(NodeList::iterator itr = _children.begin(); itr != _children.end(); ++itr)
{
(*itr)->accept(nv);
}
}
```
可以看到,不同类中的traverse方法的实现不同。在osg::NodeVisitor类中,traverse方法主要是为了调用当前所在节点的对应traverse方法。例如,如果当前节点是osg::Group类节点,则会调用osg::Group类对应的traverse方法。在osg::Node类中,traverse方法实际上是一个空函数,因为osg::Node类节点下不会再有子节点,遍历到此就会结束。而在osg::Group类中,traverse方法会循环调用osg::Group类节点下所有子节点的accept方法,以确保所有子节点都可以被访问到,从而进行一个新的遍历。
因此,根据以上信息,osg对apply方法进行了重载,并在不同的类中实现了不同的traverse方法来实现节点遍历的功能。