示例#1
0
static void Animate(const struct _md5_model *model)
{
	const struct md5_anim *anim = model->anim;
	double time, the_lerp;
	int frame, cur, next;

	time = (client_frame + lerp) / 10.0;
	frame = floor(time * anim->frameRate);
	the_lerp = (time * anim->frameRate) -
			floor(time * anim->frameRate);

	cur = frame % anim->num_frames;
	next = (frame + 1) % anim->num_frames;

	InterpolateSkeletons(anim->skelFrames[cur],
				anim->skelFrames[next],
				anim->num_joints,
				the_lerp,
				model->skeleton);
}
示例#2
0
void MD5_Update(md5_object_t* md5Object)
{
	int currentFrame ;
	md5_mesh_t* currentMesh;
	float absoluteTimePointerAnim;
	int i;
	
	absoluteTimePointerAnim = simulationTime/1000.0*md5Object->md5Anim.frameRate;
	
	currentFrame = ((int)absoluteTimePointerAnim)%md5Object->md5Anim.num_frames;
	
	InterpolateSkeletons (currentFrame,
						  md5Object->md5Anim.num_frames,
						  md5Object->md5Anim.num_joints,
						  absoluteTimePointerAnim - (int)absoluteTimePointerAnim,
						  md5Object->md5Anim.skelFrames,
						  md5Object->md5Model.baseSkel);
	
	for(i = 0; i < md5Object->md5Model.num_meshes; i++)
	{
		currentMesh = &md5Object->md5Model.meshes[i];
		GenerateGPUVertices (currentMesh,md5Object->md5Model.baseSkel);
	}
}