vec4.rst 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408
  1. .. default-domain:: C
  2. vec4
  3. ====
  4. Header: cglm/vec4.h
  5. Table of contents (click to go):
  6. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  7. Macros:
  8. 1. glm_vec4_dup3(v, dest)
  9. #. glm_vec4_dup(v, dest)
  10. #. GLM_VEC4_ONE_INIT
  11. #. GLM_VEC4_BLACK_INIT
  12. #. GLM_VEC4_ZERO_INIT
  13. #. GLM_VEC4_ONE
  14. #. GLM_VEC4_BLACK
  15. #. GLM_VEC4_ZERO
  16. Functions:
  17. 1. :c:func:`glm_vec4`
  18. #. :c:func:`glm_vec4_copy3`
  19. #. :c:func:`glm_vec4_copy`
  20. #. :c:func:`glm_vec4_ucopy`
  21. #. :c:func:`glm_vec4_zero`
  22. #. :c:func:`glm_vec4_one`
  23. #. :c:func:`glm_vec4_dot`
  24. #. :c:func:`glm_vec4_norm2`
  25. #. :c:func:`glm_vec4_norm`
  26. #. :c:func:`glm_vec4_add`
  27. #. :c:func:`glm_vec4_adds`
  28. #. :c:func:`glm_vec4_sub`
  29. #. :c:func:`glm_vec4_subs`
  30. #. :c:func:`glm_vec4_mul`
  31. #. :c:func:`glm_vec4_scale`
  32. #. :c:func:`glm_vec4_scale_as`
  33. #. :c:func:`glm_vec4_div`
  34. #. :c:func:`glm_vec4_divs`
  35. #. :c:func:`glm_vec4_addadd`
  36. #. :c:func:`glm_vec4_subadd`
  37. #. :c:func:`glm_vec4_muladd`
  38. #. :c:func:`glm_vec4_muladds`
  39. #. :c:func:`glm_vec4_maxadd`
  40. #. :c:func:`glm_vec4_minadd`
  41. #. :c:func:`glm_vec4_flipsign`
  42. #. :c:func:`glm_vec4_flipsign_to`
  43. #. :c:func:`glm_vec4_inv`
  44. #. :c:func:`glm_vec4_inv_to`
  45. #. :c:func:`glm_vec4_negate`
  46. #. :c:func:`glm_vec4_negate_to`
  47. #. :c:func:`glm_vec4_normalize`
  48. #. :c:func:`glm_vec4_normalize_to`
  49. #. :c:func:`glm_vec4_distance`
  50. #. :c:func:`glm_vec4_maxv`
  51. #. :c:func:`glm_vec4_minv`
  52. #. :c:func:`glm_vec4_clamp`
  53. #. :c:func:`glm_vec4_lerp`
  54. #. :c:func:`glm_vec4_cubic`
  55. Functions documentation
  56. ~~~~~~~~~~~~~~~~~~~~~~~
  57. .. c:function:: void glm_vec4(vec3 v3, float last, vec4 dest)
  58. init vec4 using vec3, since you are initializing vec4 with vec3
  59. you need to set last item. cglm could set it zero but making it parameter
  60. gives more control
  61. Parameters:
  62. | *[in]* **v3** vector4
  63. | *[in]* **last** last item of vec4
  64. | *[out]* **dest** destination
  65. .. c:function:: void glm_vec4_copy3(vec4 a, vec3 dest)
  66. copy first 3 members of [a] to [dest]
  67. Parameters:
  68. | *[in]* **a** source
  69. | *[out]* **dest** destination
  70. .. c:function:: void glm_vec4_copy(vec4 v, vec4 dest)
  71. copy all members of [a] to [dest]
  72. Parameters:
  73. | *[in]* **v** source
  74. | *[in]* **dest** destination
  75. .. c:function:: void glm_vec4_ucopy(vec4 v, vec4 dest)
  76. copy all members of [a] to [dest]
  77. | alignment is not required
  78. Parameters:
  79. | *[in]* **v** source
  80. | *[in]* **dest** destination
  81. .. c:function:: void glm_vec4_zero(vec4 v)
  82. makes all members zero
  83. Parameters:
  84. | *[in, out]* **v** vector
  85. .. c:function:: float glm_vec4_dot(vec4 a, vec4 b)
  86. dot product of vec4
  87. Parameters:
  88. | *[in]* **a** vector1
  89. | *[in]* **b** vector2
  90. Returns:
  91. dot product
  92. .. c:function:: float glm_vec4_norm2(vec4 v)
  93. norm * norm (magnitude) of vector
  94. we can use this func instead of calling norm * norm, because it would call
  95. sqrtf fuction twice but with this func we can avoid func call, maybe this is
  96. not good name for this func
  97. Parameters:
  98. | *[in]* **v** vector
  99. Returns:
  100. square of norm / magnitude
  101. .. c:function:: float glm_vec4_norm(vec4 vec)
  102. | euclidean norm (magnitude), also called L2 norm
  103. | this will give magnitude of vector in euclidean space
  104. Parameters:
  105. | *[in]* **vec** vector
  106. .. c:function:: void glm_vec4_add(vec4 a, vec4 b, vec4 dest)
  107. add a vector to b vector store result in dest
  108. Parameters:
  109. | *[in]* **a** vector1
  110. | *[in]* **b** vector2
  111. | *[out]* **dest** destination vector
  112. .. c:function:: void glm_vec4_adds(vec4 v, float s, vec4 dest)
  113. add scalar to v vector store result in dest (d = v + vec(s))
  114. Parameters:
  115. | *[in]* **v** vector
  116. | *[in]* **s** scalar
  117. | *[out]* **dest** destination vector
  118. .. c:function:: void glm_vec4_sub(vec4 a, vec4 b, vec4 dest)
  119. subtract b vector from a vector store result in dest (d = v1 - v2)
  120. Parameters:
  121. | *[in]* **a** vector1
  122. | *[in]* **b** vector2
  123. | *[out]* **dest** destination vector
  124. .. c:function:: void glm_vec4_subs(vec4 v, float s, vec4 dest)
  125. subtract scalar from v vector store result in dest (d = v - vec(s))
  126. Parameters:
  127. | *[in]* **v** vector
  128. | *[in]* **s** scalar
  129. | *[out]* **dest** destination vector
  130. .. c:function:: void glm_vec4_mul(vec4 a, vec4 b, vec4 d)
  131. multiply two vector (component-wise multiplication)
  132. Parameters:
  133. | *[in]* **a** vector1
  134. | *[in]* **b** vector2
  135. | *[out]* **dest** result = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3])
  136. .. c:function:: void glm_vec4_scale(vec4 v, float s, vec4 dest)
  137. multiply/scale vec4 vector with scalar: result = v * s
  138. Parameters:
  139. | *[in]* **v** vector
  140. | *[in]* **s** scalar
  141. | *[out]* **dest** destination vector
  142. .. c:function:: void glm_vec4_scale_as(vec4 v, float s, vec4 dest)
  143. make vec4 vector scale as specified: result = unit(v) * s
  144. Parameters:
  145. | *[in]* **v** vector
  146. | *[in]* **s** scalar
  147. | *[out]* **dest** destination vector
  148. .. c:function:: void glm_vec4_div(vec4 a, vec4 b, vec4 dest)
  149. div vector with another component-wise division: d = v1 / v2
  150. Parameters:
  151. | *[in]* **a** vector1
  152. | *[in]* **b** vector2
  153. | *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3])
  154. .. c:function:: void glm_vec4_divs(vec4 v, float s, vec4 dest)
  155. div vector with scalar: d = v / s
  156. Parameters:
  157. | *[in]* **v** vector
  158. | *[in]* **s** scalar
  159. | *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s, a[3] / s)
  160. .. c:function:: void glm_vec4_addadd(vec4 a, vec4 b, vec4 dest)
  161. | add two vectors and add result to sum
  162. | it applies += operator so dest must be initialized
  163. Parameters:
  164. | *[in]* **a** vector 1
  165. | *[in]* **b** vector 2
  166. | *[out]* **dest** dest += (a + b)
  167. .. c:function:: void glm_vec4_subadd(vec4 a, vec4 b, vec4 dest)
  168. | sub two vectors and add result to sum
  169. | it applies += operator so dest must be initialized
  170. Parameters:
  171. | *[in]* **a** vector 1
  172. | *[in]* **b** vector 2
  173. | *[out]* **dest** dest += (a - b)
  174. .. c:function:: void glm_vec4_muladd(vec4 a, vec4 b, vec4 dest)
  175. | mul two vectors and add result to sum
  176. | it applies += operator so dest must be initialized
  177. Parameters:
  178. | *[in]* **a** vector 1
  179. | *[in]* **b** vector 2
  180. | *[out]* **dest** dest += (a * b)
  181. .. c:function:: void glm_vec4_muladds(vec4 a, float s, vec4 dest)
  182. | mul vector with scalar and add result to sum
  183. | it applies += operator so dest must be initialized
  184. Parameters:
  185. | *[in]* **a** vector
  186. | *[in]* **s** scalar
  187. | *[out]* **dest** dest += (a * b)
  188. .. c:function:: void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest)
  189. | add max of two vector to result/dest
  190. | it applies += operator so dest must be initialized
  191. Parameters:
  192. | *[in]* **a** vector 1
  193. | *[in]* **b** vector 2
  194. | *[out]* **dest** dest += (a * b)
  195. .. c:function:: void glm_vec4_minadd(vec4 a, vec4 b, vec4 dest)
  196. | add min of two vector to result/dest
  197. | it applies += operator so dest must be initialized
  198. Parameters:
  199. | *[in]* **a** vector 1
  200. | *[in]* **b** vector 2
  201. | *[out]* **dest** dest += (a * b)
  202. .. c:function:: void glm_vec4_flipsign(vec4 v)
  203. **DEPRACATED!**
  204. use :c:func:`glm_vec4_negate`
  205. Parameters:
  206. | *[in, out]* **v** vector
  207. .. c:function:: void glm_vec4_flipsign_to(vec4 v, vec4 dest)
  208. **DEPRACATED!**
  209. use :c:func:`glm_vec4_negate_to`
  210. Parameters:
  211. | *[in]* **v** vector
  212. | *[out]* **dest** negated vector
  213. .. c:function:: void glm_vec4_inv(vec4 v)
  214. **DEPRACATED!**
  215. use :c:func:`glm_vec4_negate`
  216. Parameters:
  217. | *[in, out]* **v** vector
  218. .. c:function:: void glm_vec4_inv_to(vec4 v, vec4 dest)
  219. **DEPRACATED!**
  220. use :c:func:`glm_vec4_negate_to`
  221. Parameters:
  222. | *[in]* **v** source
  223. | *[out]* **dest** destination
  224. .. c:function:: void glm_vec4_negate(vec4 v)
  225. negate vector components
  226. Parameters:
  227. | *[in, out]* **v** vector
  228. .. c:function:: void glm_vec4_negate_to(vec4 v, vec4 dest)
  229. negate vector components and store result in dest
  230. Parameters:
  231. | *[in]* **v** vector
  232. | *[out]* **dest** negated vector
  233. .. c:function:: void glm_vec4_normalize(vec4 v)
  234. normalize vec4 and store result in same vec
  235. Parameters:
  236. | *[in, out]* **v** vector
  237. .. c:function:: void glm_vec4_normalize_to(vec4 vec, vec4 dest)
  238. normalize vec4 to dest
  239. Parameters:
  240. | *[in]* **vec** source
  241. | *[out]* **dest** destination
  242. .. c:function:: float glm_vec4_distance(vec4 v1, vec4 v2)
  243. distance between two vectors
  244. Parameters:
  245. | *[in]* **mat** vector1
  246. | *[in]* **row1** vector2
  247. Returns:
  248. | distance
  249. .. c:function:: void glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest)
  250. max values of vectors
  251. Parameters:
  252. | *[in]* **v1** vector1
  253. | *[in]* **v2** vector2
  254. | *[out]* **dest** destination
  255. .. c:function:: void glm_vec4_minv(vec4 v1, vec4 v2, vec4 dest)
  256. min values of vectors
  257. Parameters:
  258. | *[in]* **v1** vector1
  259. | *[in]* **v2** vector2
  260. | *[out]* **dest** destination
  261. .. c:function:: void glm_vec4_clamp(vec4 v, float minVal, float maxVal)
  262. constrain a value to lie between two further values
  263. Parameters:
  264. | *[in, out]* **v** vector
  265. | *[in]* **minVal** minimum value
  266. | *[in]* **maxVal** maximum value
  267. .. c:function:: void glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest)
  268. linear interpolation between two vector
  269. | formula: from + s * (to - from)
  270. Parameters:
  271. | *[in]* **from** from value
  272. | *[in]* **to** to value
  273. | *[in]* **t** interpolant (amount) clamped between 0 and 1
  274. | *[out]* **dest** destination
  275. .. c:function:: void glm_vec4_cubic(float s, vec4 dest)
  276. helper to fill vec4 as [S^3, S^2, S, 1]
  277. Parameters:
  278. | *[in]* **s** parameter
  279. | *[out]* **dest** destination