| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- .. default-domain:: C
- mat4
- ====
- Header: cglm/mat4.h
- Important: :c:func:`glm_mat4_scale` multiplies mat4 with scalar, if you need to
- apply scale transform use :c:func:`glm_scale` functions.
- Table of contents (click to go):
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Macros:
- 1. GLM_MAT4_IDENTITY_INIT
- #. GLM_MAT4_ZERO_INIT
- #. GLM_MAT4_IDENTITY
- #. GLM_MAT4_ZERO
- #. glm_mat4_udup(mat, dest)
- #. glm_mat4_dup(mat, dest)
- Functions:
- 1. :c:func:`glm_mat4_ucopy`
- #. :c:func:`glm_mat4_copy`
- #. :c:func:`glm_mat4_identity`
- #. :c:func:`glm_mat4_identity_array`
- #. :c:func:`glm_mat4_zero`
- #. :c:func:`glm_mat4_pick3`
- #. :c:func:`glm_mat4_pick3t`
- #. :c:func:`glm_mat4_ins3`
- #. :c:func:`glm_mat4_mul`
- #. :c:func:`glm_mat4_mulN`
- #. :c:func:`glm_mat4_mulv`
- #. :c:func:`glm_mat4_mulv3`
- #. :c:func:`glm_mat4_trace`
- #. :c:func:`glm_mat4_trace3`
- #. :c:func:`glm_mat4_quat`
- #. :c:func:`glm_mat4_transpose_to`
- #. :c:func:`glm_mat4_transpose`
- #. :c:func:`glm_mat4_scale_p`
- #. :c:func:`glm_mat4_scale`
- #. :c:func:`glm_mat4_det`
- #. :c:func:`glm_mat4_inv`
- #. :c:func:`glm_mat4_inv_fast`
- #. :c:func:`glm_mat4_swap_col`
- #. :c:func:`glm_mat4_swap_row`
- #. :c:func:`glm_mat4_rmc`
- #. :c:func:`glm_mat4_make`
- #. :c:func:`glm_mat4_textrans`
- Functions documentation
- ~~~~~~~~~~~~~~~~~~~~~~~
- .. c:function:: void glm_mat4_ucopy(mat4 mat, mat4 dest)
- copy mat4 to another one (dest). u means align is not required for dest
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination
- .. c:function:: void glm_mat4_copy(mat4 mat, mat4 dest)
- copy mat4 to another one (dest).
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination
- .. c:function:: void glm_mat4_identity(mat4 mat)
- copy identity mat4 to mat, or makes mat to identity
- Parameters:
- | *[out]* **mat** matrix
- .. c:function:: void glm_mat4_identity_array(mat4 * __restrict mat, size_t count)
- make given matrix array's each element identity matrix
- Parameters:
- | *[in,out]* **mat** matrix array (must be aligned (16/32) if alignment is not disabled)
- | *[in]* **count** count of matrices
- .. c:function:: void glm_mat4_zero(mat4 mat)
- make given matrix zero
- Parameters:
- | *[in,out]* **mat** matrix to
- .. c:function:: void glm_mat4_pick3(mat4 mat, mat3 dest)
- copy upper-left of mat4 to mat3
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination
- .. c:function:: void glm_mat4_pick3t(mat4 mat, mat4 dest)
- copy upper-left of mat4 to mat3 (transposed)
- the postfix t stands for transpose
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination
- .. c:function:: void glm_mat4_ins3(mat3 mat, mat4 dest)
- copy mat3 to mat4's upper-left. this function does not fill mat4's other
- elements. To do that use glm_mat4.
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination
- .. c:function:: void glm_mat4_mul(mat4 m1, mat4 m2, mat4 dest)
- multiply m1 and m2 to dest
- m1, m2 and dest matrices can be same matrix, it is possible to write this:
- .. code-block:: c
- mat4 m = GLM_MAT4_IDENTITY_INIT;
- glm_mat4_mul(m, m, m);
- Parameters:
- | *[in]* **m1** left matrix
- | *[in]* **m2** right matrix
- | *[out]* **dest** destination matrix
- .. c:function:: void glm_mat4_mulN(mat4 * __restrict matrices[], int len, mat4 dest)
- mupliply N mat4 matrices and store result in dest
- | this function lets you multiply multiple (more than two or more...)
- | matrices
- | multiplication will be done in loop, this may reduce instructions
- | size but if **len** is too small then compiler may unroll whole loop
- .. code-block:: c
- mat4 m1, m2, m3, m4, res;
- glm_mat4_mulN((mat4 *[]){&m1, &m2, &m3, &m4}, 4, res);
- Parameters:
- | *[in]* **matrices** array of mat4
- | *[in]* **len** matrices count
- | *[out]* **dest** destination matrix
- .. c:function:: void glm_mat4_mulv(mat4 m, vec4 v, vec4 dest)
- multiply mat4 with vec4 (column vector) and store in dest vector
- Parameters:
- | *[in]* **m** mat4 (left)
- | *[in]* **v** vec4 (right, column vector)
- | *[out]* **dest** vec4 (result, column vector)
- .. c:function:: void glm_mat4_mulv3(mat4 m, vec3 v, float last, vec3 dest)
- | multiply **vec3** with **mat4** and get **vec3** as result
- |
- | actually the result is **vec4**, after multiplication,
- the last component is trimmed, if you need the result's last component
- then don't use this function and consider to use **glm_mat4_mulv()**
- Parameters:
- | *[in]* **m** mat4(affine transform)
- | *[in]* **v** vec3
- | *[in]* **last** 4th item to make it vec4
- | *[out]* **dest** result vector (vec3)
- .. c:function:: void glm_mat4_trace(mat4 m)
- | sum of the elements on the main diagonal from upper left to the lower right
- Parameters:
- | *[in]* **m** matrix
- Returns:
- trace of matrix
- .. c:function:: void glm_mat4_trace3(mat4 m)
- | trace of matrix (rotation part)
- | sum of the elements on the main diagonal from upper left to the lower right
- Parameters:
- | *[in]* **m** matrix
- Returns:
- trace of matrix
- .. c:function:: void glm_mat4_quat(mat4 m, versor dest)
- convert mat4's rotation part to quaternion
- Parameters:
- | *[in]* **m** affine matrix
- | *[out]* **dest** destination quaternion
- .. c:function:: void glm_mat4_transpose_to(mat4 m, mat4 dest)
- transpose mat4 and store in dest
- source matrix will not be transposed unless dest is m
- Parameters:
- | *[in]* **m** matrix
- | *[out]* **dest** destination matrix
- .. c:function:: void glm_mat4_transpose(mat4 m)
- transpose mat4 and store result in same matrix
- Parameters:
- | *[in]* **m** source
- | *[out]* **dest** destination matrix
- .. c:function:: void glm_mat4_scale_p(mat4 m, float s)
- scale (multiply with scalar) matrix without simd optimization
- Parameters:
- | *[in, out]* **m** matrix
- | *[in]* **s** scalar
- .. c:function:: void glm_mat4_scale(mat4 m, float s)
- scale (multiply with scalar) matrix
- THIS IS NOT SCALE TRANSFORM, use glm_scale for that.
- Parameters:
- | *[in, out]* **m** matrix
- | *[in]* **s** scalar
- .. c:function:: float glm_mat4_det(mat4 mat)
- mat4 determinant
- Parameters:
- | *[in]* **mat** matrix
- Return:
- | determinant
- .. c:function:: void glm_mat4_inv(mat4 mat, mat4 dest)
- inverse mat4 and store in dest
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination matrix (inverse matrix)
- .. c:function:: void glm_mat4_inv_fast(mat4 mat, mat4 dest)
- inverse mat4 and store in dest
- | this func uses reciprocal approximation without extra corrections
- | e.g Newton-Raphson. this should work faster than normal,
- | to get more precise use glm_mat4_inv version.
- .. note:: You will lose precision, glm_mat4_inv is more accurate
- Parameters:
- | *[in]* **mat** source
- | *[out]* **dest** destination
- .. c:function:: void glm_mat4_swap_col(mat4 mat, int col1, int col2)
- swap two matrix columns
- Parameters:
- | *[in, out]* **mat** matrix
- | *[in]* **col1** col1
- | *[in]* **col2** col2
- .. c:function:: void glm_mat4_swap_row(mat4 mat, int row1, int row2)
- swap two matrix rows
- Parameters:
- | *[in, out]* **mat** matrix
- | *[in]* **row1** row1
- | *[in]* **row2** row2
- .. c:function:: float glm_mat4_rmc(vec4 r, mat4 m, vec4 c)
- | **rmc** stands for **Row** * **Matrix** * **Column**
- | helper for R (row vector) * M (matrix) * C (column vector)
- | the result is scalar because R * M = Matrix1x4 (row vector),
- | then Matrix1x4 * Vec4 (column vector) = Matrix1x1 (Scalar)
- Parameters:
- | *[in]* **r** row vector or matrix1x4
- | *[in]* **m** matrix4x4
- | *[in]* **c** column vector or matrix4x1
- Returns:
- scalar value e.g. Matrix1x1
- .. c:function:: void glm_mat4_make(const float * __restrict src, mat4 dest)
- Create mat4 matrix from pointer
- .. note:: **@src** must contain at least 16 elements.
- Parameters:
- | *[in]* **src** pointer to an array of floats
- | *[out]* **dest** destination matrix4x4
- .. c:function:: void glm_mat4_textrans(float sx, float sy, float rot, float tx, float ty, mat4 dest)
-
- Create texture transformation matrix, rotation is in radians CCW/RH
- Parameters:
- | *[in]* **sx** scale x
- | *[in]* **sy** scale y
- | *[in]* **rot** rotation in radians CCW/RH
- | *[in]* **tx** translation x
- | *[in]* **ty** translation y
- | *[out]* **dest** destination matrix3x3
|