我有一个代码通过覆盖遍历方法来处理Cull回调:
void SomeNode::traverse(osg::NodeVisitor& nv)
{
if (nv.getVisitorType() == osg::NodeVisitor::CULL_VISITOR)
{
//adjust child node positions depending on the projection
}
}
但看起来有另一种方法如何使用
添加Cull回调void Node::setCullCallback(Callback* nc);
哪一个更好,在什么情况下?第一种方法是正确的吗?
答案 0 :(得分:0)
最常见的方法是在节点上设置Cull Callback,因为它不需要您编写自定义的osg :: Node派生类。因此,您可以将回调添加到任何现有节点类型,特别是从文件加载的模型。
它也非常灵活,因为您可以在运行时轻松添加/删除/替换回调。
在这两种情况下,如果在感兴趣的节点上剔除处于活动状态,则仅当节点通过剔除测试时才会调用traverse()方法或回调。