学了几个月DX了,终于到了骨骼动画这一步了,好激动!之前导入过一些静态的模型,还是挺帅的。不过不能动,实在是太遗憾了。今天学习了骨骼动画,终于让偶的模型动起来啦!!!
一.简介
二.X文件
Animation 描述一个动画,包含一个或几个AnimationKey
AnimationKey 动画关键帧,定义具体的动作数据,包括一些列旋转、移动、放缩、矩阵变换。
ColorRGB 定义RGB对象,包括三个Float的值,分别是R、G、B。
ColorRGBA 定义RGBA对象。包括四个Float的值,分别是R、G、B、alpha。
Coords2d 定义纹理坐标向量,包括两个Float值,分别是u、v。
FloatKeys 定义浮点数组,用来定义动画键数值,包括两个部分:浮点值个数,浮点值列表。
Material 定义材质信息,可以被应用到一个完整的Mesh对象,也可以应用到其中的一个面。包含:
1.FaceColor环境光
2.Power镜面反射的强度
3.specularcolor镜面反射等等。
Matrix4X4 定义4X4矩阵,16个浮点数值。
Mesh 定义个Mesh对象,共有9个部分组成:
1、包含的顶点数
2、顶点列表,一个顶点包含三个浮点值
3、面数
4、面的顶点索引列表,每个面包含三个顶点
5、MeshFaceWraps 结构,暂时无用
6、MeshTextureCoords纹理坐标,可选
7、MeshNormals 法向,可选
8、MeshVertexColors 顶点颜色,默认为白色
9、MeshMaterialList 材质,不提供的话默认为白色。
MeshFace 面索引,包含两部分:面数,定点索引构成的面数组。
MeshTextureCoords 定义纹理坐标,包括:纹理坐标的个数,纹理坐标(每个纹理坐标有两个浮点值)。
MeshMaterialList 定义材质的应用,包括:多少个材质被使用,材质影响面的个数,面索引。
MeshNormals 定义Mesh的法向量,包括4部分:
1.nNormals法向量的个数=顶点数
2.Normals顶点法向量列表
3.nFaceNormals面的个数
4.FaceNormals面对应的法向量。
MeshVertexColors 指定顶点的颜色代替原来的材质,包含:顶点数目,颜色索引
TextureFilename 纹理的名称,字符串类型。
VertexDuplicationIndices 保留副本,用于精简Mesh的操作,包含:顶点数,原始顶点数,实际顶点数。
XSkinMeshHeader 描述被导出的SkinMesh相关信息,影响一个顶点的最多变换数目,影响每个面三个顶点的最大变换数目,影响一个顶点的骨骼数。
TimedFloatKeys 时间值,用于Animaterkey中定义时间间隔。
Vector 三维向量,三个浮点值。
SkinWeights 定义骨骼影响权重。包括以下几个部分:骨骼的名字,有多少个权重值,顶点的索引列表等等
三.封装一个容易使用的骨骼动画类
/*!
* \file AllocateHierarchy.h
*
* \author puppet_master
* \date 九月 2015
*
* \微软SDK自带的关于骨骼动画的类,用于骨骼动画的创建以及绘制更新
* \注:程序不直接使用该类,而是将此类二次封装后再使用。
*/
#ifndef __ALLOCATEHIERARCHY_H_
#define __ALLOCATEHIERARCHY_H_
//--------------------------------------------------------------------------------------
// Name: struct D3DXFRAME_DERIVED
// Desc:
//--------------------------------------------------------------------------------------
struct D3DXFRAME_DERIVED : public D3DXFRAME
{
D3DXMATRIXA16 CombinedTransformationMatrix;
};
//--------------------------------------------------------------------------------------
// Name: struct D3DXMESHCONTAINER_DERIVED
// Desc: Structure derived from D3DXMESHCONTAINER so we can add some app-specific
// info that will be stored with each mesh
//--------------------------------------------------------------------------------------
struct D3DXMESHCONTAINER_DERIVED : public D3DXMESHCONTAINER
{
//纹理信息
LPDIRECT3DTEXTURE9* ppTextures; //纹理数组
//网格信息
LPD3DXMESH pOrigMesh; //原始网格
LPD3DXATTRIBUTERANGE pAttributeTable; //属性表
DWORD NumAttributeGroups; //属性组数量(子网格数量)
DWORD NumInfl; //每个顶点最多受几个骨骼影响
LPD3DXBUFFER pBoneCombinationBuf; //骨骼结合缓存
D3DXMATRIX** ppBoneMatrixPtrs; //骨骼组合变换矩阵
D3DXMATRIX* pBoneOffsetMatrices; //骨骼初始变换矩阵
DWORD NumPaletteEntries; //骨骼数量上限
bool UseSoftwareVP; //是否使用软件顶点处理
DWORD iAttributeSW; // used to denote the split between SW and HW if necessary for non-indexed skinning
};
//--------------------------------------------------------------------------------------
// Name: class CAllocateHierarchy
// Desc: Custom version of ID3DXAllocateHierarchy with custom methods to create
// frames and meshcontainers.
//用来从.X文件中加载网格以及动画数据
//----------------------------------------
893



被折叠的 条评论
为什么被折叠?



