CAL3D 結構分析(2)


 

4.2 Vectors 和 Quaternions


Vectors 和 quaternions 是CAL3D庫中比較重要的部分。骨骼的移動,蒙皮定點的位置、蒙皮法線的朝向都存儲在一個vector中。每當一個旋轉的時候就會用到Quaternions,比如一個關節。相比於旋轉矩陣matrices ,在interpolation和 memory usage 方面 quaternions有着巨大的優勢。這就是爲什麼在Cal3d庫中你看不到Matrices的身影。如果你從矩陣matrices中的旋轉信息,你可以很容易地轉換爲quaternions 的形式。

4.3 Skeletons 和 Bones 


Cal3D被設計成基於骨架的動畫系統。意思是說動畫模型所有的蒙皮頂點都被依附在一個或幾個骨架結構的骨骼上。這就使得整個模型的動畫變得很容易,你只需要調整骨架的姿態,蒙皮就會自動的進行調整姿勢。這種把蒙皮依附在骨骼 的層次結構上的方法被稱作”Skinning“.




一個骨骼(bone)是通過相對於其父骨骼的相對轉換(transformation)來定義。這個變換信息被分成兩個獨立的部分:相對平移(translation)信息存儲在一個vector中,而相對旋轉信息存儲在一個quaternion中。一個骨骼的絕對變換是在一個Animation幀後通過遞歸計算得到的。

回想一下Cal3D中共享數據概念,核心骨架類(core skeleton)和 它的核心骨骼類(core bones)包含有如初始化骨架姿態、骨骼名稱和他們繼承關係的數據。而骨架和骨骼實例只存儲了當前的轉換信息和對應當前骨架或骨骼的鏈接信息。

4.4 Animations、Tracks、Keyframes

Cal3d中在Core model類中的Core animation裏存儲了每個運動如行走、跳躍、揮手等等。這些動畫針對每個受具體運動影響的骨骼(bone)都包含一個核心的軌跡(core track)。

Example 4-2 揮着手的步行者

比如一個像人的模型正揮着他的右手行走。在這個想定中含有兩個動畫,一個是行走動畫,另一個是揮手動畫。那個行走動畫最有可能爲每個有着完整動畫模型的骨骼包含有一個track。而那個揮手的動畫可能是會被定義成局部的,這樣只有右手、胳膊、肩膀或者可能還有脖子的數據被存儲。這種選擇性的包含允許我們有一個強大的混合。


一個骨骼(bone)的轉換數據事實上存儲在對應軌跡(track)中的幾個核心幀(core keyframes)類中,每一幀在一個具體的時間點上含有一個相對於父骨骼的平移和旋轉信息。這些值通過CAL3D進行在兩幀之間插值來獲得平滑的運動效果。


上面這些所有的這些數據可以被不同的模型實例進行共享,因而這些數據全部存儲在覈心類裏(core classes)。而動畫的激活和融合狀態(blending state )使得他們在實例之間各不相同,所以這些值在每個實例中分開定義(存貯)。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章