dd_matrix.h 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef DD_MATRIX_H
  2. #define DD_MATRIX_H
  3. /*
  4. * matrix, that controls transformations of objects
  5. */
  6. struct dd_matrix {
  7. float cell[16];
  8. };
  9. void dd_matrix_create(struct dd_matrix *m);
  10. void dd_matrix_clean(struct dd_matrix *m);
  11. /*
  12. * matrix setters
  13. */
  14. void dd_matrix_identity(struct dd_matrix *m);
  15. void dd_matrix_copy(struct dd_matrix *m1, struct dd_matrix *m2);
  16. void dd_matrix_mult(struct dd_matrix *m1, struct dd_matrix *m2);
  17. /*
  18. * matrix transformations: translate, scale, rotate, approach
  19. */
  20. void dd_matrix_translate(struct dd_matrix *m, float x, float y, float z);
  21. void dd_matrix_scale (struct dd_matrix *m, float x, float y, float z);
  22. void dd_matrix_rotate (struct dd_matrix *m, float rad, float x, float y, float z);
  23. void dd_matrix_approach (struct dd_matrix *m, struct dd_matrix *target, float counter);
  24. /*
  25. * print matrix - only for debugging reasons
  26. */
  27. void dd_matrix_print(struct dd_matrix *m);
  28. /*
  29. * manual implementation of the matrix stack
  30. */
  31. #define DD_MATRIX_STACK_LIMIT 10
  32. extern struct dd_matrix dd_cam[];
  33. extern int dd_cam_index;
  34. void dd_matrix_globalInit();
  35. void dd_matrix_push();
  36. void dd_matrix_pop ();
  37. struct dd_matrix *dd_matrix_globalGet();
  38. #define dd_pushMatrix() dd_matrix_push()
  39. #define dd_popMatrix() dd_matrix_pop()
  40. #define dd_translatef(x, y, z) dd_matrix_translatem(dd_matrix_globalGet(), x, y, z)
  41. #define dd_scalef(x, y, z) dd_matrix_scalem(dd_matrix_globalGet(), x, y, z)
  42. #define dd_rotatef(angle, x, y, z) dd_matrix_rotatem(dd_matrix_globalGet(), angle, x, y, z)
  43. #define dd_multMatrixf(matrix) dd_matrix_mult(dd_matrix_globalGet(), matrix);
  44. /*
  45. * deprecated functions
  46. *
  47. * they shouldn't be used anymore,
  48. * will be removed in a future version.
  49. */
  50. void dd_matrix_identityt(struct dd_matrix *m);
  51. void dd_matrix_translatea(struct dd_matrix *m, float x, float y, float z);
  52. void dd_matrix_translates(struct dd_matrix *m, float x, float y, float z);
  53. #define dd_matrix_translatem(m, x, y, z) dd_matrix_translate(m, x, y, z)
  54. void dd_matrix_scalea(struct dd_matrix *m, float x, float y, float z);
  55. void dd_matrix_scales(struct dd_matrix *m, float x, float y, float z);
  56. #define dd_matrix_scalem(m, x, y, z) dd_matrix_scale(m, x, y, z)
  57. void dd_matrix_rotate_x(struct dd_matrix *m, float rad);
  58. void dd_matrix_rotate_y(struct dd_matrix *m, float rad);
  59. void dd_matrix_rotate_z(struct dd_matrix *m, float rad);
  60. void dd_matrix_rotatelocal_x(struct dd_matrix *m, float rad);
  61. void dd_matrix_rotatelocal_y(struct dd_matrix *m, float rad);
  62. void dd_matrix_rotatelocal_z(struct dd_matrix *m, float rad);
  63. #define dd_matrix_rotatem(m, rad, x, y, z) dd_matrix_rotate(m, rad, x, y, z)
  64. void dd_matrix_copy_rs(struct dd_matrix *m1, struct dd_matrix *m2);
  65. void dd_matrix_approach_rs(struct dd_matrix *m1, struct dd_matrix *m2, float counter);
  66. float dd_matrix_x(struct dd_matrix *m);
  67. float dd_matrix_y(struct dd_matrix *m);
  68. float dd_matrix_z(struct dd_matrix *m);
  69. #endif