CAL3d 架構分析
4.1 概覽:
在CAL3D 中的基本思想是從單個對象的數據中中分離出可以被多個不同對象間可以共享的數據。在骨骼人物動畫中,有許多可以被共享的數據,如animation數據、mesh數據等。
CAL3D 庫中有一系列的代表一個種類模型的核心類(Core Classes,也被稱爲核心模型),這類模型中存儲了所有(其他模型)的共享的數據。另外還有每一系列的實例模型(Instance Classes,也被稱做爲模型或實例模型),這些都是從核心模型中來構造出來,代表了這類模型中一個具體的實例。(它們的關係可以比作c++中類和對象的關係,譯註)
例子說明:英雄和龍
比方說我們有一個科幻類的遊戲,裏面含有英勇的戰士和致命的龍。這樣我們將會有2種不同的核心模型(Core Models),也就是代表英雄的戰士和 恐龍的兩類。代表戰士的核心模型包含了所有動畫、材質、蒙皮等這些戰士所有可能需要的共同數據。同樣那個恐龍也是,這是核心模型。現在,只要有一個戰士或是龍的出生,一個新的模型實例將會依據核心模型被創建。單個實例的外在表現是通過從核心模型中選擇具體的蒙皮和材質來展現。這樣可以讓我們擁有很多不同戰士和龍的史詩般戰鬥,即使如此我們存儲的大部分數據只有一份。
4.1.1 核心類 Core Classes
4.1.2 實例類(Instance classes)
每一組實例類包含一個模型類型的一個實例的具體數據。這些數據可以劃分爲3部分
1. 當前骨骼狀態。
2. 當前活動的一些列動畫
3. 附着在身體上的部分物體(蒙皮)。
有四個輔助類來簡化模型處理
1. 運動控制(由Mixer管理)
2. The skinning stage (Physique).
3.衣服動畫層Spring-System (正處於實現階段)
4.1.3 其他雜類
其餘的類可以劃分4組
1. 數學相關組件(Vectors and Quaternions )
2. 錯誤處理 (Error Handling)
3. 封裝的平臺相關代碼
4. 加載和保存的輔助類
4.1.4 動畫管線
從核心數據和當前實例狀態中計算最終的模型數據的處理過程必須被看作是一個單一的管線。
1. 在"Mixer“中比較所有激活的動畫來獲取當前骨架的姿勢。
2. 在Morpher 中比較所有激活的形體目標來獲取當前蒙皮(計劃要做)
3. 依據形體中當前骨架姿勢來對當前蒙皮進行變形。
4. 在”Sping-System“ 中進行模型衣服的模擬。
5 查詢最終的數據進行渲染