2 * Copyright (C) Mount0 Software, Harry Godden - All Rights Reserved
10 #include "shaders/viewchar.h"
14 struct skeleton skele
;
15 struct skeleton_anim
*anim_stand
, *anim_highg
;
21 static void anim_test_start(void)
23 mdl_header
*johannes
= mdl_load( "models/ch_new.mdl" );
24 skeleton_setup( &animtest
.skele
, johannes
);
25 animtest
.anim_stand
= skeleton_get_anim( &animtest
.skele
, "pose_stand" );
26 animtest
.anim_highg
= skeleton_get_anim( &animtest
.skele
, "pose_highg" );
27 mdl_unpack_glmesh( johannes
, &animtest
.mesh
);
32 static void anim_test_update(void)
35 player_camera_update();
38 m4x3_identity( transform
);
41 q_axis_angle( qt
, (v3f
){0.0f
,1.0f
,0.0f
}, vg_time
*1.2f
);
42 q_m3x3( qt
, transform
);
44 mdl_keyframe apose
[32],
47 float a
= sinf(vg_time
)*0.5f
+0.5f
,
48 b
= (sinf(vg_time
*2.0f
)*0.5f
+0.5f
)*(15.0f
/30.0f
);
50 skeleton_sample_anim( &animtest
.skele
, animtest
.anim_stand
, b
, apose
);
51 skeleton_sample_anim( &animtest
.skele
, animtest
.anim_highg
, b
, bpose
);
53 skeleton_lerp_pose( &animtest
.skele
, apose
, bpose
, a
, apose
);
54 skeleton_apply_standard( &animtest
.skele
, apose
, transform
);
56 skeleton_debug( &animtest
.skele
);
59 static void anim_test_render( vg_tex2d
*tex
)
62 m4x3_expand( player
.camera_inverse
, world_4x4
);
64 gpipeline
.fov
= 60.0f
;
65 m4x4_projection( vg_pv
, gpipeline
.fov
,
66 (float)vg_window_x
/ (float)vg_window_y
,
69 m4x4_mul( vg_pv
, world_4x4
, vg_pv
);
70 glEnable( GL_DEPTH_TEST
);
72 shader_viewchar_use();
73 vg_tex2d_bind( tex
, 0 );
74 shader_viewchar_uTexMain( 0 );
75 shader_viewchar_uPv( vg_pv
);
77 shader_link_standard_ub( _shader_viewchar
.id
, 2 );
79 glUniformMatrix4x3fv( _uniform_viewchar_uTransforms
,
80 animtest
.skele
.bone_count
,
82 (float *)animtest
.skele
.final_mtx
);
84 mesh_bind( &animtest
.mesh
);
85 mesh_draw( &animtest
.mesh
);
87 glDisable( GL_DEPTH_TEST
);
88 vg_lines_drawall( (float *)vg_pv
);
91 #endif /* ANIM_TEST_H */