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);
哪一個更好,在什麼情況下?第一種方法是正確的嗎?
這個代碼重寫遍歷方法是不是很正確,因爲如果有多個Cull回調添加到一個節點,遍歷方法會多次執行(對於每個添加的collback),理論上不應該只有' nv.getVisitorType()== osg :: NodeVisitor :: CULL_VISITOR'條件,在遍歷方法中,還有類似dynamic_cast的代碼對每種類型的Cull Visitor都有不同的工作方式。 –
Koban
@Koban不確定你的意思,因爲你似乎混合了剔除訪問者和剔除回調的概念。通常,您的節點將通過與活動攝像機數量一樣多的遍歷遍歷來訪問每個幀。用於每個剔除遍歷的缺省類是osgUtil :: CullVisitor。你的回調將在每次訪問時被調用一次(考慮到我在答案中提到的剔除測試) – rickyviking