vec4.rst 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  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. #. :c:func:`glm_vec4_make`
  56. #. :c:func:`glm_vec4_reflect`
  57. #. :c:func:`glm_vec4_refract`
  58. Functions documentation
  59. ~~~~~~~~~~~~~~~~~~~~~~~
  60. .. c:function:: void glm_vec4(vec3 v3, float last, vec4 dest)
  61. init vec4 using vec3, since you are initializing vec4 with vec3
  62. you need to set last item. cglm could set it zero but making it parameter
  63. gives more control
  64. Parameters:
  65. | *[in]* **v3** vector4
  66. | *[in]* **last** last item of vec4
  67. | *[out]* **dest** destination
  68. .. c:function:: void glm_vec4_copy3(vec4 a, vec3 dest)
  69. copy first 3 members of [a] to [dest]
  70. Parameters:
  71. | *[in]* **a** source
  72. | *[out]* **dest** destination
  73. .. c:function:: void glm_vec4_copy(vec4 v, vec4 dest)
  74. copy all members of [a] to [dest]
  75. Parameters:
  76. | *[in]* **v** source
  77. | *[in]* **dest** destination
  78. .. c:function:: void glm_vec4_ucopy(vec4 v, vec4 dest)
  79. copy all members of [a] to [dest]
  80. | alignment is not required
  81. Parameters:
  82. | *[in]* **v** source
  83. | *[in]* **dest** destination
  84. .. c:function:: void glm_vec4_zero(vec4 v)
  85. makes all members zero
  86. Parameters:
  87. | *[in, out]* **v** vector
  88. .. c:function:: void glm_vec4_one(vec4 v)
  89. makes all members one
  90. Parameters:
  91. | *[in, out]* **v** vector
  92. .. c:function:: float glm_vec4_dot(vec4 a, vec4 b)
  93. dot product of vec4
  94. Parameters:
  95. | *[in]* **a** vector1
  96. | *[in]* **b** vector2
  97. Returns:
  98. dot product
  99. .. c:function:: float glm_vec4_norm2(vec4 v)
  100. norm * norm (magnitude) of vector
  101. we can use this func instead of calling norm * norm, because it would call
  102. sqrtf function twice but with this func we can avoid func call, maybe this is
  103. not good name for this func
  104. Parameters:
  105. | *[in]* **v** vector
  106. Returns:
  107. square of norm / magnitude
  108. .. c:function:: float glm_vec4_norm(vec4 vec)
  109. | euclidean norm (magnitude), also called L2 norm
  110. | this will give magnitude of vector in euclidean space
  111. Parameters:
  112. | *[in]* **vec** vector
  113. .. c:function:: void glm_vec4_add(vec4 a, vec4 b, vec4 dest)
  114. add a vector to b vector store result in dest
  115. Parameters:
  116. | *[in]* **a** vector1
  117. | *[in]* **b** vector2
  118. | *[out]* **dest** destination vector
  119. .. c:function:: void glm_vec4_adds(vec4 v, float s, vec4 dest)
  120. add scalar to v vector store result in dest (d = v + vec(s))
  121. Parameters:
  122. | *[in]* **v** vector
  123. | *[in]* **s** scalar
  124. | *[out]* **dest** destination vector
  125. .. c:function:: void glm_vec4_sub(vec4 a, vec4 b, vec4 dest)
  126. subtract b vector from a vector store result in dest (d = v1 - v2)
  127. Parameters:
  128. | *[in]* **a** vector1
  129. | *[in]* **b** vector2
  130. | *[out]* **dest** destination vector
  131. .. c:function:: void glm_vec4_subs(vec4 v, float s, vec4 dest)
  132. subtract scalar from v vector store result in dest (d = v - vec(s))
  133. Parameters:
  134. | *[in]* **v** vector
  135. | *[in]* **s** scalar
  136. | *[out]* **dest** destination vector
  137. .. c:function:: void glm_vec4_mul(vec4 a, vec4 b, vec4 d)
  138. multiply two vector (component-wise multiplication)
  139. Parameters:
  140. | *[in]* **a** vector1
  141. | *[in]* **b** vector2
  142. | *[out]* **dest** result = (a[0] * b[0], a[1] * b[1], a[2] * b[2], a[3] * b[3])
  143. .. c:function:: void glm_vec4_scale(vec4 v, float s, vec4 dest)
  144. multiply/scale vec4 vector with scalar: result = v * s
  145. Parameters:
  146. | *[in]* **v** vector
  147. | *[in]* **s** scalar
  148. | *[out]* **dest** destination vector
  149. .. c:function:: void glm_vec4_scale_as(vec4 v, float s, vec4 dest)
  150. make vec4 vector scale as specified: result = unit(v) * s
  151. Parameters:
  152. | *[in]* **v** vector
  153. | *[in]* **s** scalar
  154. | *[out]* **dest** destination vector
  155. .. c:function:: void glm_vec4_div(vec4 a, vec4 b, vec4 dest)
  156. div vector with another component-wise division: d = v1 / v2
  157. Parameters:
  158. | *[in]* **a** vector1
  159. | *[in]* **b** vector2
  160. | *[out]* **dest** result = (a[0] / b[0], a[1] / b[1], a[2] / b[2], a[3] / b[3])
  161. .. c:function:: void glm_vec4_divs(vec4 v, float s, vec4 dest)
  162. div vector with scalar: d = v / s
  163. Parameters:
  164. | *[in]* **v** vector
  165. | *[in]* **s** scalar
  166. | *[out]* **dest** result = (a[0] / s, a[1] / s, a[2] / s, a[3] / s)
  167. .. c:function:: void glm_vec4_addadd(vec4 a, vec4 b, vec4 dest)
  168. | add 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_subadd(vec4 a, vec4 b, vec4 dest)
  175. | sub 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_muladd(vec4 a, vec4 b, vec4 dest)
  182. | mul two vectors and add result to sum
  183. | it applies += operator so dest must be initialized
  184. Parameters:
  185. | *[in]* **a** vector 1
  186. | *[in]* **b** vector 2
  187. | *[out]* **dest** dest += (a * b)
  188. .. c:function:: void glm_vec4_muladds(vec4 a, float s, vec4 dest)
  189. | mul vector with scalar and add result to sum
  190. | it applies += operator so dest must be initialized
  191. Parameters:
  192. | *[in]* **a** vector
  193. | *[in]* **s** scalar
  194. | *[out]* **dest** dest += (a * b)
  195. .. c:function:: void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest)
  196. | add max 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_minadd(vec4 a, vec4 b, vec4 dest)
  203. | add min of two vector to result/dest
  204. | it applies += operator so dest must be initialized
  205. Parameters:
  206. | *[in]* **a** vector 1
  207. | *[in]* **b** vector 2
  208. | *[out]* **dest** dest += (a * b)
  209. .. c:function:: void glm_vec4_flipsign(vec4 v)
  210. **DEPRECATED!**
  211. use :c:func:`glm_vec4_negate`
  212. Parameters:
  213. | *[in, out]* **v** vector
  214. .. c:function:: void glm_vec4_flipsign_to(vec4 v, vec4 dest)
  215. **DEPRECATED!**
  216. use :c:func:`glm_vec4_negate_to`
  217. Parameters:
  218. | *[in]* **v** vector
  219. | *[out]* **dest** negated vector
  220. .. c:function:: void glm_vec4_inv(vec4 v)
  221. **DEPRECATED!**
  222. use :c:func:`glm_vec4_negate`
  223. Parameters:
  224. | *[in, out]* **v** vector
  225. .. c:function:: void glm_vec4_inv_to(vec4 v, vec4 dest)
  226. **DEPRECATED!**
  227. use :c:func:`glm_vec4_negate_to`
  228. Parameters:
  229. | *[in]* **v** source
  230. | *[out]* **dest** destination
  231. .. c:function:: void glm_vec4_negate(vec4 v)
  232. negate vector components
  233. Parameters:
  234. | *[in, out]* **v** vector
  235. .. c:function:: void glm_vec4_negate_to(vec4 v, vec4 dest)
  236. negate vector components and store result in dest
  237. Parameters:
  238. | *[in]* **v** vector
  239. | *[out]* **dest** negated vector
  240. .. c:function:: void glm_vec4_normalize(vec4 v)
  241. normalize vec4 and store result in same vec
  242. Parameters:
  243. | *[in, out]* **v** vector
  244. .. c:function:: void glm_vec4_normalize_to(vec4 vec, vec4 dest)
  245. normalize vec4 to dest
  246. Parameters:
  247. | *[in]* **vec** source
  248. | *[out]* **dest** destination
  249. .. c:function:: float glm_vec4_distance(vec4 v1, vec4 v2)
  250. distance between two vectors
  251. Parameters:
  252. | *[in]* **mat** vector1
  253. | *[in]* **row1** vector2
  254. Returns:
  255. | distance
  256. .. c:function:: void glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest)
  257. max values of vectors
  258. Parameters:
  259. | *[in]* **v1** vector1
  260. | *[in]* **v2** vector2
  261. | *[out]* **dest** destination
  262. .. c:function:: void glm_vec4_minv(vec4 v1, vec4 v2, vec4 dest)
  263. min values of vectors
  264. Parameters:
  265. | *[in]* **v1** vector1
  266. | *[in]* **v2** vector2
  267. | *[out]* **dest** destination
  268. .. c:function:: void glm_vec4_clamp(vec4 v, float minVal, float maxVal)
  269. constrain a value to lie between two further values
  270. Parameters:
  271. | *[in, out]* **v** vector
  272. | *[in]* **minVal** minimum value
  273. | *[in]* **maxVal** maximum value
  274. .. c:function:: void glm_vec4_lerp(vec4 from, vec4 to, float t, vec4 dest)
  275. linear interpolation between two vector
  276. | formula: from + s * (to - from)
  277. Parameters:
  278. | *[in]* **from** from value
  279. | *[in]* **to** to value
  280. | *[in]* **t** interpolant (amount) clamped between 0 and 1
  281. | *[out]* **dest** destination
  282. .. c:function:: void glm_vec4_cubic(float s, vec4 dest)
  283. helper to fill vec4 as [S^3, S^2, S, 1]
  284. Parameters:
  285. | *[in]* **s** parameter
  286. | *[out]* **dest** destination
  287. .. c:function:: void glm_vec4_make(const float * __restrict src, vec4 dest)
  288. Create four dimensional vector from pointer
  289. .. note:: **@src** must contain at least 4 elements.
  290. Parameters:
  291. | *[in]* **src** pointer to an array of floats
  292. | *[out]* **dest** destination vector
  293. .. c:function:: bool glm_vec4_reflect(vec4 I, vec4 N, vec4 dest)
  294. Reflection vector using an incident ray and a surface normal
  295. Parameters:
  296. | *[in]* **I** incident vector
  297. | *[in]* **N** *❗️ normalized ❗️* normal vector
  298. | *[out]* **dest** destination: reflection result
  299. .. c:function:: bool glm_vec4_refract(vec4 I, vec4 N, float eta, vec4 dest)
  300. computes refraction vector for an incident vector and a surface normal.
  301. Calculates the refraction vector based on Snell's law. If total internal reflection
  302. occurs (angle too great given eta), dest is set to zero and returns false.
  303. Otherwise, computes refraction vector, stores it in dest, and returns true.
  304. This implementation does not explicitly preserve the 'w' component of the
  305. incident vector 'I' in the output 'dest', users requiring the preservation of
  306. the 'w' component should manually adjust 'dest' after calling this function.
  307. Parameters:
  308. | *[in]* **I** *❗️ normalized ❗️* incident vector
  309. | *[in]* **N** *❗️ normalized ❗️* normal vector
  310. | *[in]* **eta** ratio of indices of refraction (incident/transmitted)
  311. | *[out]* **dest** refraction vector if refraction occurs; zero vector otherwise
  312. Returns:
  313. returns true if refraction occurs; false if total internal reflection occurs.