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