在 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() 方法或回调。
我有一个代码可以通过覆盖遍历方法来处理 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() 方法或回调。