Ik revision
[carveJwlIkooP6JGAAIwe30JlM.git] / anim_test.h
index c2f3eaea6ccfcfbb2fe1cad5ca9227f77e43b8e0..86c6853b7d884d6ceab8c63a5f15758b76e3d6d4 100644 (file)
@@ -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 );