X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skeleton.h;h=2595cda8c6476254700f6da43eac496dd4ffbd24;hb=59c926ee69a041fbe9450b302e11072d39abb432;hp=2fcfb5023f171540b517c989a918914061a8c754;hpb=6e29d444f89478d5965fc652373272e5d70e84e4;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skeleton.h b/skeleton.h index 2fcfb50..2595cda 100644 --- a/skeleton.h +++ b/skeleton.h @@ -73,6 +73,22 @@ VG_STATIC void keyframe_copy_pose( mdl_keyframe *kfa, mdl_keyframe *kfb, kfb[i] = kfa[i]; } + +/* apply a rotation from the perspective of root */ +VG_STATIC void keyframe_rotate_around( mdl_keyframe *kf, + v3f origin, v3f offset, v4f q ) +{ + v3f v0, co; + v3_add( kf->co, offset, co ); + v3_sub( co, origin, v0 ); + q_mulv( q, v0, v0 ); + v3_add( v0, origin, co ); + v3_sub( co, offset, kf->co ); + + q_mul( q, kf->q, kf->q ); + q_normalize( kf->q ); +} + /* * Lerp between two sets of keyframes and store in dest. Rotations use Nlerp. */