维爱迪-动画创作家园 >> 动画理论 >> 3D游戏角色动画 |
3 增加场景数据
在游戏中,仅仅有活灵活现的角色动画是远远不够的。因为你需要让它在具体的场景中尽情地表演,这就需要场景数据。场景数据中最具代表性的就是角色模型在游戏世界中的位置,包围球半径。显然,还有很多其它数据,这些数据都是因场合而异的。正如前面所说,X文件可以用于储存任何数据,包括场景数据。但是用X文件储存场景信息会碰到很多麻烦。比如你很难找到能够把模型转化成附有场景信息的X文件的建模工具。当然,你可以自己开发建模工具的插件。下面我介绍一个简单有效的方式得到场景数据。
很多建模软件都支持导出XML文件。在3DSMAX中,就有这样的插件。完全可以在XML文件中储存场景信息。这样,就需要一个XML文件的读取函数。虽然XML文件较为复杂,但是利用一些帮助库,可以很方便的写出XML文件的读取函数。Tinyxml 就是一个小巧稳定的XML帮助库,在互联网上可以找到很多关于它的信息。我们的目的就是把XML文件中的场景数据根据需要加载到自己定义的数据结构中。
假设定义这样一个简单的数据结构:
struct SMeshSceneInfo //Mesh场景信息,为了访问的便利,不使用链表动态分配内存
{
SMeshSceneInfo()
{
int ID=0;
D3DXVECTOR3 position(0.0f,0.0f,0.0f);
}
string name; //Mesh的名字
int ID; //MeshID
D3DXVECTOR3 position; //Mesh世界坐标
};
接着利用帮助库的函数,在程序的初始化阶段加载场景数据到这个数据结构中。之后在程序里就可以利用这些数据进行相关的操作。
4 简介渐变动画
回到20世纪90年代早期,一种革命性的计算机图形动画技术称之为morphing,就是渐变。它一举成功,成为主流技术,并延用至今。游戏中的渐变技术,最好的例子可能就是ID SOFT的雷神之锤(Quake)。所有这些角色的动画序列由一系列的渐变网格模型构成,一个模型缓慢的改变形状变成第2个模型,第2个模型再改变形状匹配到第3个网络模型上,以此类推。
其实渐变动画的原理很简单,就是差值两个关键帧模型的顶点。第一个关键帧模型叫做源网格模型,第二个关键帧叫做目标网格模型。当从第二个关键帧向第三个关键帧变化时,第二个关键帧网格又变成源网格模型,第三个关键帧变成目标网格模型。
下图显示了随着时间的变化,各网格顶点的变化:
每个顶点都共享源网格模型和目标网格模型中相同的引索。在这里,顶点的次序尤为重要,如果次序错误,将产生奇怪的动画效果。
相比骨骼蒙皮动画,渐变动画的逻辑简单许多,如果掌握了前者,很容易就能实现各种基于渐变动画的效果。