X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=anim_test.h;h=86c6853b7d884d6ceab8c63a5f15758b76e3d6d4;hb=4b222b13c504e5c21a743b7aeb02a692ce16da01;hp=5ece5f517f9a2e03179f6773a12527ed18e57ed8;hpb=1361a6d6ffda17feca6395beccf269763d3a76fa;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/anim_test.h b/anim_test.h index 5ece5f5..86c6853 100644 --- a/anim_test.h +++ b/anim_test.h @@ -3,11 +3,14 @@ #include "player.h" #include "skeleton.h" +#include "shaders/viewchar.h" static struct { struct skeleton skele; - struct skeleton_anim *yay; + struct skeleton_anim *anim_stand, *anim_highg; + + glmesh mesh; } animtest; @@ -15,7 +18,9 @@ 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, "yay" ); + 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 ); } @@ -27,12 +32,31 @@ static void anim_test_update(void) m4x3f transform; m4x3_identity( transform ); - skeleton_apply_frame( transform, &animtest.skele, animtest.yay, vg_time ); + + v4f qt; + q_axis_angle( qt, (v3f){0.0f,1.0f,0.0f}, vg_time*1.2f ); + q_m3x3( qt, transform ); + + 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 ); } -static void anim_test_render(void) +static void anim_test_render( vg_tex2d *tex ) { m4x4f world_4x4; m4x3_expand( player.camera_inverse, world_4x4 ); @@ -45,6 +69,18 @@ static void anim_test_render(void) m4x4_mul( vg_pv, world_4x4, vg_pv ); glEnable( GL_DEPTH_TEST ); + shader_viewchar_use(); + vg_tex2d_bind( tex, 0 ); + shader_viewchar_uTexMain( 0 ); + shader_viewchar_uPv( vg_pv ); + glUniformMatrix4x3fv( _uniform_viewchar_uTransforms, + animtest.skele.bone_count, + 0, + (float *)animtest.skele.final_mtx ); + + mesh_bind( &animtest.mesh ); + mesh_draw( &animtest.mesh ); + glDisable( GL_DEPTH_TEST ); vg_lines_drawall( (float *)vg_pv ); }