2017-09-25 6 views
0

内のノードにカルコールバックを追加する正しい方法私はオーバーライドトラバース法によりカルコールバックを処理するコードがあります。OpenSceneGraph

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); 

どちらが良いとどのような状況ですか?そして最初の方法は正しいですか?

答えて

0

最も一般的な方法は、カスタムosg :: Node派生クラスを記述する必要がないため、ノードでCullコールバックを設定することです。したがって、既存のノードタイプ、特にファイルからロードされたモデルにコールバックを追加することができます。

また、実行時にコールバックを簡単に追加/削除/置き換えることができるため、非常に柔軟です。

いずれの場合も、ノードがカリングテストに合格した場合にのみ、トラッキング()メソッドまたはコールバックが呼び出されます。

+0

ノードに複数のCullコールバックが追加されている場合は、トラバースメソッドが複数回実行されるため(理論的には、追加された各コラボレーションに対して)、トラバースメソッドをオーバーライドするコードは、 nv.getVisitorType()== osg :: NodeVisitor :: CULL_VISITOR '条件をトラバースメソッドで使用しますが、Cull Visitorの各タイプごとに異なるコードを動作させるためのdynamic_cast のようなものもありますか? – Koban

+0

@Kobanあなたが何を意味しているのかわからないのは、あなたがカルテ訪問者とカルコールバックのコンセプトを混ぜているようです。通常、あなたのノードは、アクティブなカメラの数と同じくらい多くの巡回によって各フレームを訪問されます。各カリングトラバーサルに使用されるデフォルトクラスはosgUtil :: CullVisitorです。あなたのコールバックは、訪問ごとに1回呼び出されます(私が答えで言及したカリングテストを考慮に入れて) – rickyviking

関連する問題