Ogre場景樹更新過程

2021-05-12 16:31:11 字數 1234 閱讀 2539

好久沒寫blog,哎,還是有點偷懶了,今天就把原來做過的乙個分析整理出來吧,主要關於ogre場景樹的更新過程。

node的更新是分兩個階段的:

1:當前幀設定節點區域性srt(縮放、旋轉、平移)

2:下一幀計算節點的世界srt

也就是說ogre不贊成你依賴他的場景樹,試試執行這個例子:

scenenode *root = mscenemgr->getrootscenenode();

scenenode *p2 = root->createchildscenenode(vector3(1,2,3));

scenenode *p3 = p2->createchildscenenode(vector3(2,3,4));

scenenode *p4 = p3->createchildscenenode(vector3(4,5,6));

vector3 v;

v = p4->_getderivedposition();

std::cout << v << std::endl;

p2->setposition(0,1,0);

v = p4->_getderivedposition();

std::cout << v << std::endl;

理想結果應該是(6,9,10),執行結果是(7,9,13),這是因為ogre是在下一幀計算節點的世界srt的,如果要在本幀獲取世界srt

最保險就是手動呼叫根節點的_update().

深入分析:

1: 呼叫任意改變節點區域性srt的方法會呼叫node::needupdate

2: needupdate會呼叫requestupdate,requestupdate是乙個遞迴函式,而且一定是子節點呼叫,例如這樣:

3: mparent->requestupdate(this, forceparentupdate);

4: requestupdate會從當前節點沿著父節點向上遞迴把自身加入到父節點的更新節點集中

5: 場景管理器會在每幀開始前呼叫getrootscenenode()->_update(true, false)

6: _update會深度遞迴場景樹更新每個節點的世界srt

這裡還有乙個優化,就是ogre只更新requestupdate收集的子節點,^_^

apk包更新過程

2 正式伺服器清理cdn快取 直接訪問 更新前檢視新版 1.75 mb 1,840,030 位元組 開啟後更新 secondhand.apk 舊版 1.75 mb 1,839,987 位元組 4 新建版本 設定預設 例項列表 重啟 版本管理 發布cdn 清除cdn快取 5 更新url 清理cdn快取...

Github Pages 部落格更新過程的備忘

hexo init folder hexo new layout hexo generate hexo g選項 描述 d,deploy 檔案生成後立即部署 hexo publish layout hexo serverhexo deploy hexo d選項 描述 g,generate 部署之前預先...

對Google更新過程的最終解釋

google是如何更新全部索引的?這是乙個範圍相當寬的問題,大家都知道,google為確保向使用者提供最具相關性和質量最高的搜尋結果而對其資料庫按月進行更新。為了回答上述問題,在本文中我將向大家詳細說明google更新過程的每個步驟。有相當多的使用者和公司都已經發現,為了在早期的搜尋引擎優化中,能在...