骨骼动画的一些东东

        int nbones;			//骨骼数
	int nanims;				//动画数目
	int nkeys;				//动画关键帧数
	int animkeys[MAX_MESHANIMS];													//每个动画的关键帧数
	int animkeyspos[MAX_MESHANIMS];												//每个动画关键帧偏移
	char animnames[MAX_MESHANIMS][MAX_MESHSTRLEN];		//动画名
	char bonenames[MAX_MESHANIMS][MAX_MESHSTRLEN];		//骨骼名

	int *nvweights;				//顶点受影响的骨骼数
	int *vindex;					//骨骼权重索引数组,就是指vweight数组中的权重是对应那一块骨骼的权重(骨骼的索引)
	int *parent;					//骨骼的父节点
	Vector4 *vweight;		//顶点的骨骼权重数组,
	                               //这里之所以会搞成一个向量而不是一个float类型的值是因为向量前三个分量表示顶点的位置,
	                               //最后一个分量才表示权重值
	Matrix4x4 *tm;				//骨骼对应帧的变换矩阵  这里存储着每一帧的每一个骨骼的变换矩阵
	Matrix4x4 *m;				//当前帧的骨骼变换阵
	int root;							//根骨骼的索引

	int nmtl;							//材质数
	int nverts;						//顶点数
	int nfaces;						//面片数
	int* nfacesinpermtl;		//每个材质的面片数


从文件里加载骨骼的各种信息

1:加载骨骼的材质数目,这个文件里的三角形划分是按照材质来划分的,材质1对应哪些三角形,材质2对应哪些三角形等

2:顶点数目,骨骼数目,每个顶点的纹理坐标,顶点的基本颜色

3:nvweights数组,数组大小是顶点的数目,数组里存储的是每个顶点受几块骨骼影响,

      totweight是把所有顶点的受骨骼影响数目加在一起,vindex是int数组,数组大小为totweight,表示受影响的骨骼索引,vweight数组大小也是totweight,表示对应的权重信息

     这里有一点要额外说明的是,这个文件有点奇怪,他没有把顶点的位置信息单独列出来,而是和权重信息放在一起了,所以vweight数组其实不是float类型的数组,而是vector类型的数组,数组中每一个值都是vector向量,该vector前三个表示位置信息,最 后 一个才表示权重信息

         int p=0;  这里p主要用来处理vindex和vweight数组的
         for(int k=0;k<nverts;k++)
	{
		skeltemp[k].u=verts[k].texcoord.X;  纹理坐标   
		skeltemp[k].v=verts[k].texcoord.Y;
		skeltemp[k].numOfBone=nvweights[k];  顶点受几块骨骼影响
		for(int n=0;n<nvweights[k];n++,p++)
		{
			skeltemp[k].x=vweight[p].X;  位置信息
			skeltemp[k].y=vweight[p].Y; 
			skeltemp[k].z=vweight[p].Z;
			skeltemp[k].weight[n]=vweight[p].W; 权重信息
			skeltemp[k].index[n]=vindex[p];  骨骼的索引
		}
	}


4:骨骼的矩阵信息,这里给出的是每一帧动画,骨骼的矩阵信息,所以有一个很大的矩阵大小为nkey*nbones,我们计算的时候只需要取出那一帧的所有骨骼的矩阵就行了




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值