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); }
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); } }