在 OpenSceneGraph 中向节点添加 Cull Callback 的正确方法

The right way of adding a Cull Callback to a node in OpenSceneGraph

我有一个代码可以通过覆盖遍历方法来处理 Cull 回调:

void SomeNode::traverse(osg::NodeVisitor& nv)
{
    if (nv.getVisitorType() == osg::NodeVisitor::CULL_VISITOR)
    {
        //adjust child node positions depending on the projection
    }
}

但看起来还有另一种方法可以使用

添加剔除回调
void Node::setCullCallback(Callback* nc);

在什么情况下哪个更好?第一种方式是否正确?

最常见的方法是在节点上设置 Cull Callback,因为它不需要您编写自定义 osg::Node 派生 class。因此,您可以将回调添加到任何现有节点类型,特别是从文件加载的模型。

它也非常灵活,因为您可以在运行时轻松 add/remove/replace 回调。

在这两种情况下,如果感兴趣的节点上的剔除处于活动状态,则仅当节点通过剔除测试时才会调用 traverse() 方法或回调。