affine2d.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * Copyright (c), Recep Aslantas.
  3. *
  4. * MIT License (MIT), http://opensource.org/licenses/MIT
  5. * Full license can be found in the LICENSE file
  6. */
  7. /*
  8. Functions:
  9. CGLM_INLINE mat3s glms_translate2d(mat3 m, vec2 v)
  10. CGLM_INLINE mat3s glms_translate2d_x(mat3s m, float x)
  11. CGLM_INLINE mat3s glms_translate2d_y(mat3s m, float y)
  12. CGLM_INLINE mat3s glms_translate2d_make(vec2s v)
  13. CGLM_INLINE mat3s glms_scale2d_make(vec2s v)
  14. CGLM_INLINE mat3s glms_scale2d(mat3s m, vec2s v)
  15. CGLM_INLINE mat3s glms_scale2d_uni(mat3s m, float s)
  16. CGLM_INLINE mat3s glms_rotate2d_make(float angle)
  17. CGLM_INLINE mat3s glms_rotate2d(mat3s m, float angle)
  18. CGLM_INLINE mat3s glms_rotate2d_to(mat3s m, float angle)
  19. */
  20. #ifndef cglms_affine2ds_h
  21. #define cglms_affine2ds_h
  22. #include "../common.h"
  23. #include "../types-struct.h"
  24. #include "../affine2d.h"
  25. #include "vec3.h"
  26. #include "mat3.h"
  27. /*!
  28. * @brief translate existing 2d transform matrix by v vector
  29. * and stores result in same matrix
  30. *
  31. * @param[in] m affine transform
  32. * @param[in] v translate vector [x, y]
  33. * @returns affine transform
  34. */
  35. CGLM_INLINE
  36. mat3s
  37. glms_translate2d(mat3s m, vec2s v) {
  38. glm_translate2d(m.raw, v.raw);
  39. return m;
  40. }
  41. /*!
  42. * @brief translate existing 2d transform matrix by x factor
  43. *
  44. * @param[in] m affine transform
  45. * @param[in] x x factor
  46. * @returns affine transform
  47. */
  48. CGLM_INLINE
  49. mat3s
  50. glms_translate2d_x(mat3s m, float x) {
  51. glm_translate2d_x(m.raw, x);
  52. return m;
  53. }
  54. /*!
  55. * @brief translate existing 2d transform matrix by y factor
  56. *
  57. * @param[in] m affine transform
  58. * @param[in] y y factor
  59. * @returns affine transform
  60. */
  61. CGLM_INLINE
  62. mat3s
  63. glms_translate2d_y(mat3s m, float y) {
  64. glm_translate2d_y(m.raw, y);
  65. return m;
  66. }
  67. /*!
  68. * @brief creates NEW translate 2d transform matrix by v vector
  69. *
  70. * @param[in] v translate vector [x, y]
  71. * @returns affine transform
  72. */
  73. CGLM_INLINE
  74. mat3s
  75. glms_translate2d_make(vec2s v) {
  76. mat3s m;
  77. glm_translate2d_make(m.raw, v.raw);
  78. return m;
  79. }
  80. /*!
  81. * @brief creates NEW 2d scale matrix by v vector
  82. *
  83. * @param[in] v scale vector [x, y]
  84. * @returns affine transform
  85. */
  86. CGLM_INLINE
  87. mat3s
  88. glms_scale2d_make(vec2s v) {
  89. mat3s m;
  90. glm_scale2d_make(m.raw, v.raw);
  91. return m;
  92. }
  93. /*!
  94. * @brief scales existing 2d transform matrix by v vector
  95. * and stores result in same matrix
  96. *
  97. * @param[in] m affine transform
  98. * @param[in] v scale vector [x, y, z]
  99. * @returns affine transform
  100. */
  101. CGLM_INLINE
  102. mat3s
  103. glms_scale2d(mat3s m, vec2s v) {
  104. mat3s r;
  105. glm_scale2d_to(m.raw, v.raw, r.raw);
  106. return r;
  107. }
  108. /*!
  109. * @brief applies uniform scale to existing 2d transform matrix v = [s, s, s]
  110. * and stores result in same matrix
  111. *
  112. * @param[in] m affine transform
  113. * @param[in] s scale factor
  114. * @returns affine transform
  115. */
  116. CGLM_INLINE
  117. mat3s
  118. glms_scale2d_uni(mat3s m, float s) {
  119. glm_scale2d_uni(m.raw, s);
  120. return m;
  121. }
  122. /*!
  123. * @brief creates NEW 2d rotation matrix by angle and axis
  124. *
  125. * axis will be normalized so you don't need to normalize it
  126. *
  127. * @param[in] angle angle (radians)
  128. * @returns affine transform
  129. */
  130. CGLM_INLINE
  131. mat3s
  132. glms_rotate2d_make(float angle) {
  133. mat3s m;
  134. glm_rotate2d_make(m.raw, angle);
  135. return m;
  136. }
  137. /*!
  138. * @brief rotate existing 2d transform matrix around given axis by angle
  139. *
  140. * @param[in] m affine transform
  141. * @param[in] angle angle (radians)
  142. * @returns affine transform
  143. */
  144. CGLM_INLINE
  145. mat3s
  146. glms_rotate2d(mat3s m, float angle) {
  147. glm_rotate2d(m.raw, angle);
  148. return m;
  149. }
  150. /*!
  151. * @brief rotate existing 2d transform matrix around given axis by angle
  152. *
  153. * @param[in] m affine transform
  154. * @param[in] angle angle (radians)
  155. * @returns affine transform
  156. */
  157. CGLM_INLINE
  158. mat3s
  159. glms_rotate2d_to(mat3s m, float angle) {
  160. glm_rotate2d(m.raw, angle);
  161. return m;
  162. }
  163. #endif /* cglms_affine2ds_h */