Ogre學習筆記(8):骨骼動畫

來源:互聯網
上載者:User
       OGRE的基本動畫控制是很簡單的,設定一個動畫的操作是這樣:

       // Set idle animation

mAnimationState = ent->getAnimationState( "Idle" );  

mAnimationState->setLoop( true );

mAnimationState->setEnabled( true );

(上面這段代碼來自Intermediate Tutorial1 – Ogre Wiki)從一個Entity對象中得到AnimationState指標,然後設定一些屬性,在每幀需要調用:

       mAnimationState->addTime( evt.timeSinceLastFrame );

 

 

Skeleton的載入:

在SkeletalApplication::createScene()中

SkeletonPtr skel = SkeletonManager::getSingleton().load("jaiqua.skeleton",

                     ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

這個語句用來讀取骨骼檔案。讀取的操作在“Skeleton::loadImpl”函數中。此函數主要執行了兩步操作,一是調用“SkeletonSerializer::importSkeleton()”,二是“Load any linked skeletons”。動畫資訊儲存在Skeleton的“AnimationList mAnimationsList”成員變數中。

在Mesh類從儲存了一個“SkeletonPtr mSkeleton”, SkeletonPtr是一個“SharedPtr<Skeleton>”的衍生類別。在load一個mesh是:

MeshSerializerImpl::readMesh()――case M_MESH_SKELETON_LINK:

――》MeshSerializerImpl::readSkeletonLink()
       ――》Mesh::setSkeletonName()
       ――》ResourceManager::load()――得到骨骼指標

Animation類的對象就是“An animation sequence”,各種類型的動畫序列都由這個類來管理。它管理了三種類型的Track list,分別是:NodeAnimationTrack、NumericAnimationTrack、VertexAnimationTrack。

在Entity的建構函式中,如果Mesh含有骨骼動畫或者頂點動畫,則會new一個AnimationStateSet對象,並調用“mesh->_initAnimationState(mAnimationState);”。

 

 

動畫的計算:

Entity中儲存了一個SkeletonInstance對象指標,它是Skeleton的衍生類別。

主要運算就在“void Entity::updateAnimation(void)”函數中。

à Entity::cacheBoneMatrices
       à Skeleton::setAnimationState
       此函數先是調用“Skeleton::reset”,然後針對每個enabled animation state,找到其對應的Animation,然後調用Animation::apply()來計算每個Bone的狀態。

 

整體感覺OGRE的動畫管理結構比較混亂。Entity,Skeleton,Animation,AnimationState,SkeletonInstance之間的依賴關係過於複雜,並且存在循環相依性。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.