X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=anim_test.h;h=86c6853b7d884d6ceab8c63a5f15758b76e3d6d4;hb=6a4dafa6fe9a3dd4bb88698bbe964154364390ec;hp=c2f3eaea6ccfcfbb2fe1cad5ca9227f77e43b8e0;hpb=3d5597be2fd4b5d9ea3bf8863e15cc9bc8123755;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/anim_test.h b/anim_test.h index c2f3eae..86c6853 100644 --- a/anim_test.h +++ b/anim_test.h @@ -8,7 +8,7 @@ static struct { struct skeleton skele; - struct skeleton_anim *yay; + struct skeleton_anim *anim_stand, *anim_highg; glmesh mesh; } @@ -18,7 +18,8 @@ static void anim_test_start(void) { mdl_header *johannes = mdl_load( "models/ch_new.mdl" ); skeleton_setup( &animtest.skele, johannes ); - animtest.yay = skeleton_get_anim( &animtest.skele, "pose_stand" ); + animtest.anim_stand = skeleton_get_anim( &animtest.skele, "pose_stand" ); + animtest.anim_highg = skeleton_get_anim( &animtest.skele, "pose_highg" ); mdl_unpack_glmesh( johannes, &animtest.mesh ); free( johannes ); @@ -36,8 +37,21 @@ static void anim_test_update(void) q_axis_angle( qt, (v3f){0.0f,1.0f,0.0f}, vg_time*1.2f ); q_m3x3( qt, transform ); - skeleton_apply_frame( transform, &animtest.skele, animtest.yay, vg_time ); + mdl_keyframe apose[32], + bpose[32]; + + float a = sinf(vg_time)*0.5f+0.5f, + b = (sinf(vg_time*2.0f)*0.5f+0.5f)*(15.0f/30.0f); + + skeleton_sample_anim( &animtest.skele, animtest.anim_stand, b, apose ); + skeleton_sample_anim( &animtest.skele, animtest.anim_highg, b, bpose ); + + skeleton_lerp_pose( &animtest.skele, apose, bpose, a, apose ); + skeleton_apply_pose( &animtest.skele, apose, k_anim_apply_defer_ik ); skeleton_apply_ik_pass( &animtest.skele ); + skeleton_apply_pose( &animtest.skele, apose, k_anim_apply_deffered_only ); + skeleton_apply_inverses( &animtest.skele ); + skeleton_apply_transform( &animtest.skele, transform ); skeleton_debug( &animtest.skele ); } @@ -62,7 +76,7 @@ static void anim_test_render( vg_tex2d *tex ) glUniformMatrix4x3fv( _uniform_viewchar_uTransforms, animtest.skele.bone_count, 0, - (float *)animtest.skele.final_transforms ); + (float *)animtest.skele.final_mtx ); mesh_bind( &animtest.mesh ); mesh_draw( &animtest.mesh );