much better implicit IK solver
[carveJwlIkooP6JGAAIwe30JlM.git] / anim_test.h
index 5ece5f517f9a2e03179f6773a12527ed18e57ed8..c2f3eaea6ccfcfbb2fe1cad5ca9227f77e43b8e0 100644 (file)
@@ -3,11 +3,14 @@
 
 #include "player.h"
 #include "skeleton.h"
+#include "shaders/viewchar.h"
 
 static struct 
 {
    struct skeleton skele;
    struct skeleton_anim *yay;
+
+   glmesh mesh;
 }
 animtest;
 
@@ -15,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, "yay" );
+   animtest.yay = skeleton_get_anim( &animtest.skele, "pose_stand" );
+   mdl_unpack_glmesh( johannes, &animtest.mesh );
 
    free( johannes );
 }
@@ -27,12 +31,18 @@ static void anim_test_update(void)
    
    m4x3f transform;
    m4x3_identity( transform );
+   
+   v4f qt;
+   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 );
+   skeleton_apply_ik_pass( &animtest.skele );
 
    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 +55,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_transforms );
+   
+   mesh_bind( &animtest.mesh );
+   mesh_draw( &animtest.mesh );
+
    glDisable( GL_DEPTH_TEST );
    vg_lines_drawall( (float *)vg_pv );
 }