最近看了骨骼动画相关的知识,结合.X文件结构来分享一下自己对骨骼动画的初步理解。
什么是骨骼?骨骼好比人体内的骨头,骨头的运动带动着皮肤以及肉体的运动。同理,在D3D里面定义一个骨骼来带动周围一些顶点的运用。当然这个骨骼是抽象的,本身没有顶点来描述他的形态,它主要负责保存模型运动时的变化的信息,骨骼在.X文件里面用模板Frame来定义。
看看带骨骼的.X文件,一般的结构是:
Frame Frame1
{
FrameTransformMatrix
{
}
Mesh Mesh1
{
}
}
FrameTransformMatrix 表示了骨骼相对模型中心的变化矩阵,假如我们人的中心位置是在躯体的中心(大概是胃的位置),手臂的骨骼离那个位置是有一些偏移的,这个矩阵就是用来计算这个偏移信息的。
Mesh1是表示附属在Frame1上的模型顶点信息。比如我们手臂的骨头动了,附在上面的皮肤和肉都要动,在3D里面这些是用三角形来表示的。因此Mesh1表示Frame1影响到得顶点的信息。
要想产生动画, 光有骨骼还不行,必须得有描述这些骨骼在某一时候如何运动的信息。在.X文件里面,这些运动信息用模板AnimationSet来描述。
AnimationSet walk
{
Animation Animation1
{
{Frame1}
AnimationKey
{
}
}
Animation Animation2
{
{Frame2}
AnimationKey
什么是骨骼?骨骼好比人体内的骨头,骨头的运动带动着皮肤以及肉体的运动。同理,在D3D里面定义一个骨骼来带动周围一些顶点的运用。当然这个骨骼是抽象的,本身没有顶点来描述他的形态,它主要负责保存模型运动时的变化的信息,骨骼在.X文件里面用模板Frame来定义。
看看带骨骼的.X文件,一般的结构是:
Frame Frame1
{
FrameTransformMatrix
{
}
Mesh Mesh1
{
}
}
FrameTransformMatrix 表示了骨骼相对模型中心的变化矩阵,假如我们人的中心位置是在躯体的中心(大概是胃的位置),手臂的骨骼离那个位置是有一些偏移的,这个矩阵就是用来计算这个偏移信息的。
Mesh1是表示附属在Frame1上的模型顶点信息。比如我们手臂的骨头动了,附在上面的皮肤和肉都要动,在3D里面这些是用三角形来表示的。因此Mesh1表示Frame1影响到得顶点的信息。
要想产生动画, 光有骨骼还不行,必须得有描述这些骨骼在某一时候如何运动的信息。在.X文件里面,这些运动信息用模板AnimationSet来描述。
AnimationSet walk
{
Animation Animation1
{
{Frame1}
AnimationKey
{
}
}
Animation Animation2
{
{Frame2}
AnimationKey