vec3.rst 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. .. default-domain:: C
  2. vec3
  3. ====
  4. Header: cglm/vec3.h
  5. We mostly use vectors in graphics math, to make writing code faster
  6. and easy to read, some *vec3* functions are aliased in global namespace.
  7. For instance :c:func:`glm_dot` is alias of :c:func:`glm_vec_dot`,
  8. alias means inline wrapper here. There is no call verison of alias functions
  9. There are also functions for rotating *vec3* vector. **_m4**, **_m3** prefixes
  10. rotate *vec3* with matrix.
  11. Table of contents (click to go):
  12. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  13. Macros:
  14. 1. glm_vec_dup(v, dest)
  15. #. GLM_VEC3_ONE_INIT
  16. #. GLM_VEC3_ZERO_INIT
  17. #. GLM_VEC3_ONE
  18. #. GLM_VEC3_ZERO
  19. #. GLM_YUP
  20. #. GLM_ZUP
  21. #. GLM_XUP
  22. Functions:
  23. 1. :c:func:`glm_vec3`
  24. #. :c:func:`glm_vec_copy`
  25. #. :c:func:`glm_vec_zero`
  26. #. :c:func:`glm_vec_one`
  27. #. :c:func:`glm_vec_dot`
  28. #. :c:func:`glm_vec_cross`
  29. #. :c:func:`glm_vec_norm2`
  30. #. :c:func:`glm_vec_norm`
  31. #. :c:func:`glm_vec_add`
  32. #. :c:func:`glm_vec_adds`
  33. #. :c:func:`glm_vec_sub`
  34. #. :c:func:`glm_vec_subs`
  35. #. :c:func:`glm_vec_mul`
  36. #. :c:func:`glm_vec_scale`
  37. #. :c:func:`glm_vec_scale_as`
  38. #. :c:func:`glm_vec_div`
  39. #. :c:func:`glm_vec_divs`
  40. #. :c:func:`glm_vec_addadd`
  41. #. :c:func:`glm_vec_subadd`
  42. #. :c:func:`glm_vec_muladd`
  43. #. :c:func:`glm_vec_muladds`
  44. #. :c:func:`glm_vec_flipsign`
  45. #. :c:func:`glm_vec_flipsign_to`
  46. #. :c:func:`glm_vec_inv`
  47. #. :c:func:`glm_vec_inv_to`
  48. #. :c:func:`glm_vec_normalize`
  49. #. :c:func:`glm_vec_normalize_to`
  50. #. :c:func:`glm_vec_distance2`
  51. #. :c:func:`glm_vec_distance`
  52. #. :c:func:`glm_vec_angle`
  53. #. :c:func:`glm_vec_rotate`
  54. #. :c:func:`glm_vec_rotate_m4`
  55. #. :c:func:`glm_vec_rotate_m3`
  56. #. :c:func:`glm_vec_proj`
  57. #. :c:func:`glm_vec_center`
  58. #. :c:func:`glm_vec_maxv`
  59. #. :c:func:`glm_vec_minv`
  60. #. :c:func:`glm_vec_ortho`
  61. #. :c:func:`glm_vec_clamp`
  62. #. :c:func:`glm_vec_lerp`
  63. Functions documentation
  64. ~~~~~~~~~~~~~~~~~~~~~~~
  65. .. c:function:: void glm_vec3(vec4 v4, vec3 dest)
  66. init vec3 using vec4
  67. Parameters:
  68. | *[in]* **v4** vector4
  69. | *[out]* **dest** destination
  70. .. c:function:: void glm_vec_copy(vec3 a, vec3 dest)
  71. copy all members of [a] to [dest]
  72. Parameters:
  73. | *[in]* **a** source
  74. | *[out]* **dest** destination
  75. .. c:function:: void glm_vec_zero(vec3 v)
  76. makes all members 0.0f (zero)
  77. Parameters:
  78. | *[in, out]* **v** vector
  79. .. c:function:: void glm_vec_one(vec3 v)
  80. makes all members 1.0f (one)
  81. Parameters:
  82. | *[in, out]* **v** vector
  83. .. c:function:: float glm_vec_dot(vec3 a, vec3 b)
  84. dot product of vec3
  85. Parameters:
  86. | *[in]* **a** vector1
  87. | *[in]* **b** vector2
  88. Returns:
  89. dot product
  90. .. c:function:: void glm_vec_cross(vec3 a, vec3 b, vec3 d)
  91. cross product
  92. Parameters:
  93. | *[in]* **a** source 1
  94. | *[in]* **b** source 2
  95. | *[out]* **d** destination
  96. .. c:function:: float glm_vec_norm2(vec3 v)
  97. norm * norm (magnitude) of vector
  98. we can use this func instead of calling norm * norm, because it would call
  99. sqrtf fuction twice but with this func we can avoid func call, maybe this is
  100. not good name for this func
  101. Parameters:
  102. | *[in]* **v** vector
  103. Returns:
  104. square of norm / magnitude
  105. .. c:function:: float glm_vec_norm(vec3 vec)
  106. norm (magnitude) of vec3
  107. Parameters:
  108. | *[in]* **vec** vector
  109. .. c:function:: void glm_vec_add(vec3 a, vec3 b, vec3 dest)
  110. add a vector to b vector store result in dest
  111. Parameters:
  112. | *[in]* **a** vector1
  113. | *[in]* **b** vector2
  114. | *[out]* **dest** destination vector
  115. .. c:function:: void glm_vec_adds(vec3 a, float s, vec3 dest)
  116. add scalar to v vector store result in dest (d = v + vec(s))
  117. Parameters:
  118. | *[in]* **v** vector
  119. | *[in]* **s** scalar
  120. | *[out]* **dest** destination vector
  121. .. c:function:: void glm_vec_sub(vec3 v1, vec3 v2, vec3 dest)
  122. subtract b vector from a vector store result in dest (d = v1 - v2)
  123. Parameters:
  124. | *[in]* **a** vector1
  125. | *[in]* **b** vector2
  126. | *[out]* **dest** destination vector
  127. .. c:function:: void glm_vec_subs(vec3 v, float s, vec3 dest)
  128. subtract scalar from v vector store result in dest (d = v - vec(s))
  129. Parameters:
  130. | *[in]* **v** vector
  131. | *[in]* **s** scalar
  132. | *[out]* **dest** destination vector
  133. .. c:function:: void glm_vec_mul(vec3 a, vec3 b, vec3 d)
  134. multiply two vector (component-wise multiplication)
  135. Parameters:
  136. | *[in]* **a** vector
  137. | *[in]* **b** scalar
  138. | *[out]* **d** result = (a[0] * b[0], a[1] * b[1], a[2] * b[2])
  139. .. c:function:: void glm_vec_scale(vec3 v, float s, vec3 dest)
  140. multiply/scale vec3 vector with scalar: result = v * s
  141. Parameters:
  142. | *[in]* **v** vector
  143. | *[in]* **s** scalar
  144. | *[out]* **dest** destination vector
  145. .. c:function:: void glm_vec_scale_as(vec3 v, float s, vec3 dest)
  146. make vec3 vector scale as specified: result = unit(v) * s
  147. Parameters:
  148. | *[in]* **v** vector
  149. | *[in]* **s** scalar
  150. | *[out]* **dest** destination vector
  151. .. c:function:: void glm_vec_div(vec3 a, vec3 b, vec3 dest)
  152. div vector with another component-wise division: d = a / b
  153. Parameters:
  154. | *[in]* **a** vector 1
  155. | *[in]* **b** vector 2
  156. | *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2])
  157. .. c:function:: void glm_vec_divs(vec3 v, float s, vec3 dest)
  158. div vector with scalar: d = v / s
  159. Parameters:
  160. | *[in]* **v** vector
  161. | *[in]* **s** scalar
  162. | *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s])
  163. .. c:function:: void glm_vec_addadd(vec3 a, vec3 b, vec3 dest)
  164. | add two vectors and add result to sum
  165. | it applies += operator so dest must be initialized
  166. Parameters:
  167. | *[in]* **a** vector 1
  168. | *[in]* **b** vector 2
  169. | *[out]* **dest** dest += (a + b)
  170. .. c:function:: void glm_vec_subadd(vec3 a, vec3 b, vec3 dest)
  171. | sub two vectors and add result to sum
  172. | it applies += operator so dest must be initialized
  173. Parameters:
  174. | *[in]* **a** vector 1
  175. | *[in]* **b** vector 2
  176. | *[out]* **dest** dest += (a - b)
  177. .. c:function:: void glm_vec_muladd(vec3 a, vec3 b, vec3 dest)
  178. | mul two vectors and add result to sum
  179. | it applies += operator so dest must be initialized
  180. Parameters:
  181. | *[in]* **a** vector 1
  182. | *[in]* **b** vector 2
  183. | *[out]* **dest** dest += (a * b)
  184. .. c:function:: void glm_vec_muladds(vec3 a, float s, vec3 dest)
  185. | mul vector with scalar and add result to sum
  186. | it applies += operator so dest must be initialized
  187. Parameters:
  188. | *[in]* **a** vector
  189. | *[in]* **s** scalar
  190. | *[out]* **dest** dest += (a * b)
  191. .. c:function:: void glm_vec_flipsign(vec3 v)
  192. flip sign of all vec3 members
  193. Parameters:
  194. | *[in, out]* **v** vector
  195. .. c:function:: void glm_vec_flipsign_to(vec3 v, vec3 dest)
  196. flip sign of all vec3 members and store result in dest
  197. Parameters:
  198. | *[in]* **v** vector
  199. | *[out]* **dest** negated vector
  200. .. c:function:: void glm_vec_inv(vec3 v)
  201. make vector as inverse/opposite of itself
  202. Parameters:
  203. | *[in, out]* **v** vector
  204. .. c:function:: void glm_vec_inv_to(vec3 v, vec3 dest)
  205. inverse/opposite vector
  206. Parameters:
  207. | *[in]* **v** source
  208. | *[out]* **dest** destination
  209. .. c:function:: void glm_vec_normalize(vec3 v)
  210. normalize vec3 and store result in same vec
  211. Parameters:
  212. | *[in, out]* **v** vector
  213. .. c:function:: void glm_vec_normalize_to(vec3 vec, vec3 dest)
  214. normalize vec3 to dest
  215. Parameters:
  216. | *[in]* **vec** source
  217. | *[out]* **dest** destination
  218. .. c:function:: float glm_vec_angle(vec3 v1, vec3 v2)
  219. angle betwen two vector
  220. Parameters:
  221. | *[in]* **v1** vector1
  222. | *[in]* **v2** vector2
  223. Return:
  224. | angle as radians
  225. .. c:function:: void glm_vec_rotate(vec3 v, float angle, vec3 axis)
  226. rotate vec3 around axis by angle using Rodrigues' rotation formula
  227. Parameters:
  228. | *[in, out]* **v** vector
  229. | *[in]* **axis** axis vector (will be normalized)
  230. | *[out]* **angle** angle (radians)
  231. .. c:function:: void glm_vec_rotate_m4(mat4 m, vec3 v, vec3 dest)
  232. apply rotation matrix to vector
  233. Parameters:
  234. | *[in]* **m** affine matrix or rot matrix
  235. | *[in]* **v** vector
  236. | *[out]* **dest** rotated vector
  237. .. c:function:: void glm_vec_rotate_m3(mat3 m, vec3 v, vec3 dest)
  238. apply rotation matrix to vector
  239. Parameters:
  240. | *[in]* **m** affine matrix or rot matrix
  241. | *[in]* **v** vector
  242. | *[out]* **dest** rotated vector
  243. .. c:function:: void glm_vec_proj(vec3 a, vec3 b, vec3 dest)
  244. project a vector onto b vector
  245. Parameters:
  246. | *[in]* **a** vector1
  247. | *[in]* **b** vector2
  248. | *[out]* **dest** projected vector
  249. .. c:function:: void glm_vec_center(vec3 v1, vec3 v2, vec3 dest)
  250. find center point of two vector
  251. Parameters:
  252. | *[in]* **v1** vector1
  253. | *[in]* **v2** vector2
  254. | *[out]* **dest** center point
  255. .. c:function:: float glm_vec_distance2(vec3 v1, vec3 v2)
  256. squared distance between two vectors
  257. Parameters:
  258. | *[in]* **mat** vector1
  259. | *[in]* **row1** vector2
  260. Returns:
  261. | squared distance (distance * distance)
  262. .. c:function:: float glm_vec_distance(vec3 v1, vec3 v2)
  263. distance between two vectors
  264. Parameters:
  265. | *[in]* **mat** vector1
  266. | *[in]* **row1** vector2
  267. Returns:
  268. | distance
  269. .. c:function:: void glm_vec_maxv(vec3 v1, vec3 v2, vec3 dest)
  270. max values of vectors
  271. Parameters:
  272. | *[in]* **v1** vector1
  273. | *[in]* **v2** vector2
  274. | *[out]* **dest** destination
  275. .. c:function:: void glm_vec_minv(vec3 v1, vec3 v2, vec3 dest)
  276. min values of vectors
  277. Parameters:
  278. | *[in]* **v1** vector1
  279. | *[in]* **v2** vector2
  280. | *[out]* **dest** destination
  281. .. c:function:: void glm_vec_ortho(vec3 v, vec3 dest)
  282. possible orthogonal/perpendicular vector
  283. Parameters:
  284. | *[in]* **mat** vector
  285. | *[out]* **dest** orthogonal/perpendicular vector
  286. .. c:function:: void glm_vec_clamp(vec3 v, float minVal, float maxVal)
  287. constrain a value to lie between two further values
  288. Parameters:
  289. | *[in, out]* **v** vector
  290. | *[in]* **minVal** minimum value
  291. | *[in]* **maxVal** maximum value
  292. .. c:function:: void glm_vec_lerp(vec3 from, vec3 to, float t, vec3 dest)
  293. linear interpolation between two vector
  294. | formula: from + s * (to - from)
  295. Parameters:
  296. | *[in]* **from** from value
  297. | *[in]* **to** to value
  298. | *[in]* **t** interpolant (amount) clamped between 0 and 1
  299. | *[out]* **dest** destination