X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skeleton.h;h=9729b64c04a95b7b052ba1daa3f280f444670a44;hb=4eccfd7252f8ff165670842df537441afae5458b;hp=b94fa68cb84af7f75fe4ef0edfb9c305c9162720;hpb=6ba5c35d106d749a1ebafbd3cbe18c3a02f781d3;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skeleton.h b/skeleton.h index b94fa68..9729b64 100644 --- a/skeleton.h +++ b/skeleton.h @@ -2,9 +2,8 @@ * Copyright (C) 2021-2022 Mt.ZERO Software, Harry Godden - All Rights Reserved */ -#ifndef SKELETON_H -#define SKELETON_H - +#pragma once +#include "vg/vg_lines.h" #include "model.h" struct skeleton @@ -91,12 +90,18 @@ static void keyframe_rotate_around( mdl_keyframe *kf, q_normalize( kf->q ); } +static void keyframe_lerp( mdl_keyframe *kfa, mdl_keyframe *kfb, f32 t, + mdl_keyframe *kfd ){ + v3_lerp( kfa->co, kfb->co, t, kfd->co ); + q_nlerp( kfa->q, kfb->q, t, kfd->q ); + v3_lerp( kfa->s, kfb->s, t, kfd->s ); +} + /* * Lerp between two sets of keyframes and store in dest. Rotations use Nlerp. */ static void keyframe_lerp_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, - float t, mdl_keyframe *kfd, int count ) -{ + float t, mdl_keyframe *kfd, int count ){ if( t <= 0.0001f ){ keyframe_copy_pose( kfa, kfd, count ); return; @@ -106,11 +111,8 @@ static void keyframe_lerp_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, return; } - for( int i=0; iq, posemtx ); + m3x3_scale( posemtx, kf->s ); v3_copy( kf->co, posemtx[3] ); } return; @@ -239,6 +242,7 @@ static void skeleton_apply_pose( struct skeleton *skele, mdl_keyframe *pose, /* pose matrix */ mdl_keyframe *kf = &pose[i-1]; q_m3x3( kf->q, posemtx ); + m3x3_scale( posemtx, kf->s ); v3_copy( kf->co, posemtx[3] ); v3_add( temp_delta, posemtx[3], posemtx[3] ); @@ -579,5 +583,3 @@ static void skeleton_debug( struct skeleton *skele, m4x3f *final_mtx ){ vg_line( p0, p1, 0xff00ffff ); } } - -#endif /* SKELETON_H */