在CAL3D 中的基本思想是从单个对象的数据中中分离出可以被多个不同对象间可以共享的数据。在骨骼人物动画中,有许多可以被共享的数据,如animation数据、mesh数据等。
CAL3D 库中有一系列的代表一个种类模型的核心类(Core Classes,也被称为核心模型),这类模型中存储了所有(其他模型)的共享的数据。另外还有每一系列的实例模型(Instance Classes,也被称做为模型或实例模型),这些都是从核心模型中来构造出来,代表了这类模型中一个具体的实例。(它们的关系可以比作c++中类和对象的关系,译注)
例子说明:英雄和龙
比方说我们有一个科幻类的游戏,里面含有英勇的战士和致命的龙。这样我们将会有2种不同的核心模型(Core Models),也就是代表英雄的战士和 恐龙的两类。代表战士的核心模型包含了所有动画、材质、蒙皮等这些战士所有可能需要的共同数据。同样那个恐龙也是,这是核心模型。现在,只要有一个战士或是龙的出生,一个新的模型实例将会依据核心模型被创建。单个实例的外在表现是通过从核心模型中选择具体的蒙皮和材质来展现。这样可以让我们拥有很多不同战士和龙的史诗般战斗,即使如此我们存储的大部分数据只有一份。
每一组实例类包含一个模型类型的一个实例的具体数据。这些数据可以划分为3部分
1. 当前骨骼状态。
2. 当前活动的一些列动画
3. 附着在身体上的部分物体(蒙皮)。
有四个辅助类来简化模型处理
1. 运动控制(由Mixer管理)
2. The skinning stage (Physique).
3.衣服动画层Spring-System (正处于实现阶段)
其余的类可以划分4组
1. 数学相关组件(Vectors and Quaternions )
2. 错误处理 (Error Handling)
3. 封装的平台相关代码
4. 加载和保存的辅助类
从核心数据和当前实例状态中计算最终的模型数据的处理过程必须被看作是一个单一的管线。
1. 在"Mixer“中比较所有激活的动画来获取当前骨架的姿势。
2. 在Morpher 中比较所有激活的形体目标来获取当前蒙皮(计划要做)
3. 依据形体中当前骨架姿势来对当前蒙皮进行变形。
4. 在”Sping-System“ 中进行模型衣服的模拟。
5 查询最终的数据进行渲染
原文地址:http://blog.csdn.net/zhuyingqingfen/article/details/38110611