vec3ΒΆ
Header: cglm/vec3.h
Important: cglm was used glm_vec_ namespace for vec3 functions until v0.5.0, since v0.5.0 cglm uses glm_vec3_ namespace for vec3.
Also glm_vec3_flipsign has been renamed to glm_vec3_negate
We mostly use vectors in graphics math, to make writing code faster
and easy to read, some vec3 functions are aliased in global namespace.
For instance glm_dot()
is alias of glm_vec3_dot()
,
alias means inline wrapper here. There is no call verison of alias functions
There are also functions for rotating vec3 vector. _m4, _m3 prefixes rotate vec3 with matrix.
Table of contents (click to go):ΒΆ
Macros:
- glm_vec3_dup(v, dest)
- GLM_VEC3_ONE_INIT
- GLM_VEC3_ZERO_INIT
- GLM_VEC3_ONE
- GLM_VEC3_ZERO
- GLM_YUP
- GLM_ZUP
- GLM_XUP
Functions:
glm_vec3()
glm_vec3_copy()
glm_vec3_zero()
glm_vec3_one()
glm_vec3_dot()
glm_vec3_norm2()
glm_vec3_norm()
glm_vec3_add()
glm_vec3_adds()
glm_vec3_sub()
glm_vec3_subs()
glm_vec3_mul()
glm_vec3_scale()
glm_vec3_scale_as()
glm_vec3_div()
glm_vec3_divs()
glm_vec3_addadd()
glm_vec3_subadd()
glm_vec3_muladd()
glm_vec3_muladds()
glm_vec3_maxadd()
glm_vec3_minadd()
glm_vec3_flipsign()
glm_vec3_flipsign_to()
glm_vec3_inv()
glm_vec3_inv_to()
glm_vec3_negate()
glm_vec3_negate_to()
glm_vec3_normalize()
glm_vec3_normalize_to()
glm_vec3_cross()
glm_vec3_crossn()
glm_vec3_distance2()
glm_vec3_distance()
glm_vec3_angle()
glm_vec3_rotate()
glm_vec3_rotate_m4()
glm_vec3_rotate_m3()
glm_vec3_proj()
glm_vec3_center()
glm_vec3_maxv()
glm_vec3_minv()
glm_vec3_ortho()
glm_vec3_clamp()
glm_vec3_lerp()
glm_vec3_make()
Functions documentationΒΆ
-
void
glm_vec3
(vec4 v4, vec3 dest)ΒΆ init vec3 using vec4
- Parameters:
- [in] v4 vector4[out] dest destination
-
void
glm_vec3_copy
(vec3 a, vec3 dest)ΒΆ copy all members of [a] to [dest]
- Parameters:
- [in] a source[out] dest destination
-
void
glm_vec3_zero
(vec3 v)ΒΆ makes all members 0.0f (zero)
- Parameters:
- [in, out] v vector
-
void
glm_vec3_one
(vec3 v)ΒΆ makes all members 1.0f (one)
- Parameters:
- [in, out] v vector
-
float
glm_vec3_dot
(vec3 a, vec3 b)ΒΆ dot product of vec3
- Parameters:
- [in] a vector1[in] b vector2
- Returns:
- dot product
-
void
glm_vec3_cross
(vec3 a, vec3 b, vec3 d)ΒΆ cross product of two vector (RH)
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest destination
-
void
glm_vec3_crossn
(vec3 a, vec3 b, vec3 dest)ΒΆ cross product of two vector (RH) and normalize the result
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest destination
-
float
glm_vec3_norm2
(vec3 v)ΒΆ norm * norm (magnitude) of vector
we can use this func instead of calling norm * norm, because it would call sqrtf fuction twice but with this func we can avoid func call, maybe this is not good name for this func
- Parameters:
- [in] v vector
- Returns:
- square of norm / magnitude
-
float
glm_vec3_norm
(vec3 vec)ΒΆ - euclidean norm (magnitude), also called L2 normthis will give magnitude of vector in euclidean space
- Parameters:
- [in] vec vector
-
void
glm_vec3_add
(vec3 a, vec3 b, vec3 dest)ΒΆ add a vector to b vector store result in dest
- Parameters:
- [in] a vector1[in] b vector2[out] dest destination vector
-
void
glm_vec3_adds
(vec3 a, float s, vec3 dest)ΒΆ add scalar to v vector store result in dest (d = v + vec(s))
- Parameters:
- [in] v vector[in] s scalar[out] dest destination vector
-
void
glm_vec3_sub
(vec3 v1, vec3 v2, vec3 dest)ΒΆ subtract b vector from a vector store result in dest (d = v1 - v2)
- Parameters:
- [in] a vector1[in] b vector2[out] dest destination vector
-
void
glm_vec3_subs
(vec3 v, float s, vec3 dest)ΒΆ subtract scalar from v vector store result in dest (d = v - vec(s))
- Parameters:
- [in] v vector[in] s scalar[out] dest destination vector
-
void
glm_vec3_mul
(vec3 a, vec3 b, vec3 d)ΒΆ multiply two vector (component-wise multiplication)
- Parameters:
- [in] a vector[in] b scalar[out] d result = (a[0] * b[0], a[1] * b[1], a[2] * b[2])
-
void
glm_vec3_scale
(vec3 v, float s, vec3 dest)ΒΆ - multiply/scale vec3 vector with scalar: result = v * s
- Parameters:
- [in] v vector[in] s scalar[out] dest destination vector
-
void
glm_vec3_scale_as
(vec3 v, float s, vec3 dest)ΒΆ make vec3 vector scale as specified: result = unit(v) * s
- Parameters:
- [in] v vector[in] s scalar[out] dest destination vector
-
void
glm_vec3_div
(vec3 a, vec3 b, vec3 dest)ΒΆ div vector with another component-wise division: d = a / b
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest result = (a[0] / b[0], a[1] / b[1], a[2] / b[2])
-
void
glm_vec3_divs
(vec3 v, float s, vec3 dest)ΒΆ div vector with scalar: d = v / s
- Parameters:
- [in] v vector[in] s scalar[out] dest result = (a[0] / s, a[1] / s, a[2] / s])
-
void
glm_vec3_addadd
(vec3 a, vec3 b, vec3 dest)ΒΆ - add two vectors and add result to sumit applies += operator so dest must be initialized
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest dest += (a + b)
-
void
glm_vec3_subadd
(vec3 a, vec3 b, vec3 dest)ΒΆ - sub two vectors and add result to sumit applies += operator so dest must be initialized
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest dest += (a - b)
-
void
glm_vec3_muladd
(vec3 a, vec3 b, vec3 dest)ΒΆ - mul two vectors and add result to sumit applies += operator so dest must be initialized
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest dest += (a * b)
-
void
glm_vec3_muladds
(vec3 a, float s, vec3 dest)ΒΆ - mul vector with scalar and add result to sumit applies += operator so dest must be initialized
- Parameters:
- [in] a vector[in] s scalar[out] dest dest += (a * b)
-
void
glm_vec3_maxadd
(vec3 a, vec3 b, vec3 dest)ΒΆ - add max of two vector to result/destit applies += operator so dest must be initialized
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest dest += (a * b)
-
void
glm_vec3_minadd
(vec3 a, vec3 b, vec3 dest)ΒΆ - add min of two vector to result/destit applies += operator so dest must be initialized
- Parameters:
- [in] a vector 1[in] b vector 2[out] dest dest += (a * b)
-
void
glm_vec3_flipsign
(vec3 v)ΒΆ DEPRACATED!
- Parameters:
- [in, out] v vector
-
void
glm_vec3_flipsign_to
(vec3 v, vec3 dest)ΒΆ DEPRACATED!
- Parameters:
- [in] v vector[out] dest negated vector
-
void
glm_vec3_inv
(vec3 v)ΒΆ DEPRACATED!
- Parameters:
- [in, out] v vector
-
void
glm_vec3_inv_to
(vec3 v, vec3 dest)ΒΆ DEPRACATED!
- Parameters:
- [in] v source[out] dest destination
-
void
glm_vec3_negate
(vec3 v)ΒΆ negate vector components
- Parameters:
- [in, out] v vector
-
void
glm_vec3_negate_to
(vec3 v, vec3 dest)ΒΆ negate vector components and store result in dest
- Parameters:
- [in] v vector[out] dest negated vector
-
void
glm_vec3_normalize
(vec3 v)ΒΆ normalize vec3 and store result in same vec
- Parameters:
- [in, out] v vector
-
void
glm_vec3_normalize_to
(vec3 vec, vec3 dest)ΒΆ - normalize vec3 to dest
- Parameters:
- [in] vec source[out] dest destination
-
float
glm_vec3_angle
(vec3 v1, vec3 v2)ΒΆ angle betwen two vector
- Parameters:
- [in] v1 vector1[in] v2 vector2
- Return:
- angle as radians
-
void
glm_vec3_rotate
(vec3 v, float angle, vec3 axis)ΒΆ - rotate vec3 around axis by angle using Rodriguesβ rotation formula
- Parameters:
- [in, out] v vector[in] axis axis vector (will be normalized)[in] angle angle (radians)
-
void
glm_vec3_rotate_m4
(mat4 m, vec3 v, vec3 dest)ΒΆ apply rotation matrix to vector
- Parameters:
- [in] m affine matrix or rot matrix[in] v vector[out] dest rotated vector
-
void
glm_vec3_rotate_m3
(mat3 m, vec3 v, vec3 dest)ΒΆ apply rotation matrix to vector
- Parameters:
- [in] m affine matrix or rot matrix[in] v vector[out] dest rotated vector
-
void
glm_vec3_proj
(vec3 a, vec3 b, vec3 dest)ΒΆ project a vector onto b vector
- Parameters:
- [in] a vector1[in] b vector2[out] dest projected vector
-
void
glm_vec3_center
(vec3 v1, vec3 v2, vec3 dest)ΒΆ find center point of two vector
- Parameters:
- [in] v1 vector1[in] v2 vector2[out] dest center point
-
float
glm_vec3_distance2
(vec3 v1, vec3 v2)ΒΆ squared distance between two vectors
- Parameters:
- [in] v1 vector1[in] v2 vector2
- Returns:
- squared distance (distance * distance)
-
float
glm_vec3_distance
(vec3 v1, vec3 v2)ΒΆ distance between two vectors
- Parameters:
- [in] v1 vector1[in] v2 vector2
- Returns:
- distance
-
void
glm_vec3_maxv
(vec3 v1, vec3 v2, vec3 dest)ΒΆ max values of vectors
- Parameters:
- [in] v1 vector1[in] v2 vector2[out] dest destination
-
void
glm_vec3_minv
(vec3 v1, vec3 v2, vec3 dest)ΒΆ min values of vectors
- Parameters:
- [in] v1 vector1[in] v2 vector2[out] dest destination
-
void
glm_vec3_ortho
(vec3 v, vec3 dest)ΒΆ possible orthogonal/perpendicular vector
- References:
- Parameters:
- [in] v vector[out] dest orthogonal/perpendicular vector
-
void
glm_vec3_clamp
(vec3 v, float minVal, float maxVal)ΒΆ constrain a value to lie between two further values
- Parameters:
- [in, out] v vector[in] minVal minimum value[in] maxVal maximum value
-
void
glm_vec3_lerp
(vec3 from, vec3 to, float t, vec3 dest)ΒΆ linear interpolation between two vector
formula: from + s * (to - from)- Parameters:
- [in] from from value[in] to to value[in] t interpolant (amount) clamped between 0 and 1[out] dest destination
-
void
glm_vec3_make
(float * __restrict src, vec3 dest)ΒΆ Create three dimensional vector from pointer
NOTE: @src must contain at least 3 elements.- Parameters:
- [in] src pointer to an array of floats[out] dest destination vector