skeleton.h 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /**
  2. *** :: Skeleton ::
  3. ***
  4. ***
  5. **/
  6. #ifndef skeleton_h
  7. #define skeleton_h
  8. #include "cengine.h"
  9. typedef struct {
  10. int joint_count;
  11. int* joint_parents;
  12. vec3* joint_positions;
  13. quat* joint_rotations;
  14. mat4* transforms;
  15. mat4* transforms_inv;
  16. } frame;
  17. frame* frame_new();
  18. frame* frame_copy(frame* f);
  19. frame* frame_interpolate(frame* f0, frame* f1, float amount);
  20. void frame_copy_to(frame* f, frame* out);
  21. void frame_interpolate_to(frame* f0, frame* f1, float amount, frame* out);
  22. void frame_decendants_to(frame* f0, frame* f1, float amount, int joint, frame* out);
  23. void frame_delete(frame* f);
  24. mat4 frame_joint_transform(frame* f, int i);
  25. void frame_joint_add(frame* f, int parent, vec3 position, quat rotation);
  26. void frame_gen_transforms(frame* f);
  27. void frame_gen_inv_transforms(frame* f);
  28. typedef struct {
  29. int joint_count;
  30. char** joint_names;
  31. frame* rest_pose;
  32. } skeleton;
  33. skeleton* skeleton_new();
  34. void skeleton_delete(skeleton* s);
  35. void skeleton_joint_add(skeleton* s, char* name, int parent);
  36. int skeleton_joint_id(skeleton* s, char* name);
  37. skeleton* skl_load_file(char* filename);
  38. #endif