osg 場景節點新增 刪除 隱藏

2021-10-03 04:33:03 字數 2009 閱讀 6666

新增節點

我們通過osg::ref_ptrroot = new osg::group();申請場景根節點

通過osg::ref_ptrnode = new osg::node();可以申請多個節點,從而達到在場景中新增多個場景

如:osg::ref_ptrroot = new osg::group();

osg::ref_ptrnode = osgdb::readnodefile("cow.osg");

root->addchild(osgdb::readnodefile("glider.osg"));

root->addchild(node.get());

刪除節點

因某種需要,現需要刪除某些節點。可以通過removechild刪除個別節點,也可以通過removechildren刪除多個節點,裡面的引數有些需要索引值

如:root->removechild(node1);

如果要刪除乙個節點,那麼該節點下的所有節點都會被刪除,如果乙個節點被加入到乙個組中兩次,那麼這兩次就分別存在,刪除一次還有另一次。

在記憶體映像中,如果乙個模型被讀取一次,而用了多次,那麼所占用的空間是不會改變的。

假設:osg::ref_ptr型別結點root,root下加三個孩子osg::ref_ptr型別結點node1、node2、node3,

程式會按加的順序記錄索引,此時root會記錄node1、node2、node3分別為孩子0、1、2,node1、node2、node3也都會記錄root為它們的父親0,

若:node1下還有一些孩子節點,即其為一樹, 使用root->removechild(node1); ///移除root下的node1結點,node1的樹關係不會變 ,只是解除root與node1的父子關係

這時root會自動將noee2變為root孩子0,node3變為root孩子1。對於node1變為無父親節點。只要沒有對node1指標清零,這個節點的資料還是存在的,還可以再次利用。

若:定義型別osg::ref_ptf的transform變化結點。

操作 root->replacechild(node1, transform) ///把node1節點換成transform節點,此時在root下node2為0孩子,node3為1孩子,transform為2孩子。

操作 tansform->addchild(node1); ///node1的父親0為transform,假設node1還有其他父節點,那麼結果就是tansform是其最後乙個父親了。

經常使用這兩段**對場景根下的某個結點進行位置變換,所以,使用孩子取代函式replacechild並不是對被取代結點和取代結點進行簡單的替換,而是每進行一次這樣的操作會把取代結點transform作為root根節點的最後乙個孩子索引,被取代節點node1也是把取代結點作為最後乙個父親。

隱藏和顯示模型的兩種方式

1、通過設定osg::node的mask實現

隱藏模式,只是將模型隱藏,模型仍在渲染中,損耗並未減少。

可以通過:node->setnodemask(0x0) 設定隱藏

可以通過:node->setnodemask(1) 設定顯示

2、通過osg::switch實現

osg::ref_ptrsw = new osg::switch();

sw->setvalue(i, true/false);//設定第i個節點的顯示或隱藏

os**iewer::viewer viewer;

osg::ref_ptrroot = new osg::group();

osg::ref_ptrnode = osgdb::readnodefile("robot.osg");

osg::ref_ptrsw = new osg::switch();

sw->addchild(node,false);   //false引數顯示關,可通過設定為ture顯示為開

root->addchild(sw);

viewer.setscenedata(root);

viewer.realize();

return viewer.run();

OSG 場景節點新增,刪除,隱藏 ,開關

新增節點 我們通過osg ref ptrroot new osg group 申請場景根節點 通過osg ref ptrnode new osg node 可以申請多個節點,從而達到在場景中新增多個場景 如 osg ref ptrroot new osg group osg ref ptrnode ...

OSG 場景節點新增,刪除,隱藏 ,開關

新增節點 我們通過osg ref ptrroot new osg group 申請場景根節點 通過osg ref ptrnode new osg node 可以申請多個節點,從而達到在場景中新增多個場景 如 osg ref ptrroot new osg group osg ref ptrnode ...

新增 刪除osd節點步驟

1 ceph osd tree 檢視目前cluster 狀態 df h mnt ceph vol1 確保node1掛載了rbd,在節點 node1上執行2 在節點node4上安裝ceph 並複製ceph.conf到其相應位置,同時在 etc hosts裡新增節點node4和相應ip,並推送到所有節點...