動畫分析

1. SceneNode Animation是根據mInitPosition等進行的,而不是根據當前的位置移動;
2. 如果想設置爲根據當前的位置進行移動,則需要在動畫開始前設置setInitialState,將當前狀態作爲動畫的起始狀態;
3. 動畫結束後,不會恢復到原來的位置,而是動畫結束時候的位置(說明動畫的最後變換是寫到了Node中的mPosition, mOrientation, mScale中了);
4.結論:ogre如何實現了節點動畫?
    4.1 從Animation中得到兩個幀,插值兩個變換得到中間狀態;
    4.2 將插值得到的變換加上mInitPosition得到最後的變換;
   4.3 動畫中的關鍵幀保存的是相對動畫起始位置的變換,而不是相對上一個關鍵幀的變換;
   4.4 動畫的最終結果是保存在mPosition等中的,後面如果對該節點進行變換操作,是相對於動畫結束的位置進行的。
   4.5 動畫的執行實在SceneManager中的_applySceneAnimations函數中進行的,每次調用_renderScene時都會調用該函數,前者先調用resetToInitialState使Node回到m_InitPosition的狀態,然後調用Animation的apply函數得到插值的變換,在作用到Node上去。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章