# ivec3

Header: cglm/ivec3.h

## Table of contents (click to go):

Macros:

1. GLM_IVEC3_ONE_INIT

2. GLM_IVEC3_ZERO_INIT

3. GLM_IVEC3_ONE

4. GLM_IVEC3_ZERO

Functions:

1. `glm_ivec3()`

2. `glm_ivec3_copy()`

3. `glm_ivec3_zero()`

4. `glm_ivec3_one()`

5. `glm_ivec3_dot()`

6. `glm_ivec3_norm2()`

7. `glm_ivec3_norm()`

8. `glm_ivec3_add()`

9. `glm_ivec3_adds()`

10. `glm_ivec3_sub()`

11. `glm_ivec3_subs()`

12. `glm_ivec3_mul()`

13. `glm_ivec3_scale()`

14. `glm_ivec3_div()`

15. `glm_ivec3_divs()`

16. `glm_ivec3_mod()`

17. `glm_ivec3_distance2()`

18. `glm_ivec3_distance()`

19. `glm_ivec3_fill()`

20. `glm_ivec3_eq()`

21. `glm_ivec3_eqv()`

22. `glm_ivec3_maxv()`

23. `glm_ivec3_minv()`

24. `glm_ivec3_clamp()`

25. `glm_ivec2_abs()`

## Functions documentation

void glm_ivec3(ivec4 v4, ivec3 dest)

  init ivec3 using ivec4

  Parameters:
    [in] v vector
    [out] dest destination

void glm_ivec3_copy(ivec3 a, ivec3 dest)

  copy all members of [a] to [dest]

  Parameters:
    [in] a source vector
    [out] dest destination

void glm_ivec3_zero(ivec3 v)

  set all members of [v] to zero

  Parameters:
    [out] v vector

void glm_ivec3_one(ivec3 v)

  set all members of [v] to one

  Parameters:
    [out] v vector

int glm_ivec3_dot(ivec3 a, ivec3 b)

  dot product of ivec3

  Parameters:
    [in] a vector1
    [in] b vector2
  Returns:

    dot product

int glm_ivec3_norm2(ivec3 v)

  norm * norm (magnitude) of vector

  we can use this func instead of calling norm * norm, because it would call sqrtf function 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, cast to an integer

int glm_ivec3_norm(ivec3 vec)
  euclidean norm (magnitude), also called L2 norm
  this will give magnitude of vector in euclidean space
  Parameters:
    [in] vec vector

void glm_ivec3_add(ivec3 a, ivec3 b, ivec3 dest)

  add vector [a] to vector [b] and store result in [dest]

  Parameters:
    [in] a first vector
    [in] b second vector
    [out] dest destination

void glm_ivec3_adds(ivec3 v, int s, ivec3 dest)

  add scalar s to vector [v] and store result in [dest]

  Parameters:
    [in] v vector
    [in] s scalar
    [out] dest destination

void glm_ivec3_sub(ivec3 a, ivec3 b, ivec3 dest)

  subtract vector [b] from vector [a] and store result in [dest]

  Parameters:
    [in] a first vector
    [in] b second vector
    [out] dest destination

void glm_ivec3_subs(ivec3 v, int s, ivec3 dest)

  subtract scalar s from vector [v] and store result in [dest]

  Parameters:
    [in] v vector
    [in] s scalar
    [out] dest destination

void glm_ivec3_mul(ivec3 a, ivec3 b, ivec3 dest)

  multiply vector [a] with vector [b] and store result in [dest]

  Parameters:
    [in] a first vector
    [in] b second vector
    [out] dest destination

void glm_ivec3_scale(ivec3 v, int s, ivec3 dest)

  multiply vector [a] with scalar s and store result in [dest]

  Parameters:
    [in] v vector
    [in] s scalar
    [out] dest destination

void glm_ivec3_div(ivec3 a, ivec3 b, ivec3 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_ivec3_divs(ivec3 v, int s, ivec3 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_ivec3_mod(ivec3 a, ivec3 b, ivec3 dest)

  mod vector with another component-wise modulo: d = a % b

  Parameters:
    [in] a vector
    [in] b scalar
    [out] dest result = (a[0] % b[0], a[1] % b[1], a[2] % b[2])

int glm_ivec3_distance2(ivec3 a, ivec3 b)

  squared distance between two vectors

  Parameters:
    [in] a first vector
    [in] b second vector
  Returns:

    squared distance (distance * distance)

float glm_ivec3_distance(ivec3 a, ivec3 b)

  distance between two vectors

  Parameters:
    [in] a first vector
    [in] b second vector
  Returns:

    distance

void glm_ivec3_fill(ivec3 v, int val)

  fill a vector with specified value

  Parameters:
    [out] v vector
    [in] val value

bool glm_ivec3_eq(ivec3 v, int val)

  check if vector is equal to value

  Parameters:
    [in] v vector
    [in] val value

bool glm_ivec3_eqv(ivec3 v1, ivec3 v2)

  check if vector is equal to another vector

  Parameters:
    [in] vec vector 1
    [in] vec vector 2

void glm_ivec3_maxv(ivec3 a, ivec3 b, ivec3 dest)

  set each member of dest to greater of vector a and b

  Parameters:
    [in] a first vector
    [in] b second vector
    [out] dest destination

void glm_ivec3_minv(ivec3 a, ivec3 b, ivec3 dest)

  set each member of dest to lesser of vector a and b

  Parameters:
    [in] a first vector
    [in] b second vector
    [out] dest destination

void glm_ivec3_clamp(ivec3 v, int minVal, int maxVal)

  clamp each member of [v] between minVal and maxVal (inclusive)

  Parameters:
    [in, out] v vector
    [in] minVal minimum value
    [in] maxVal maximum value

void glm_ivec3_abs(ivec3 v, ivec3 dest)

  absolute value of each vector item

  Parameters:
    [in] v vector
    [out] dest destination vector