| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313 |
- .. default-domain:: C
- camera
- ======
- Header: cglm/cam.h
- There are many convenient functions for camera. For instance :c:func:`glm_look`
- is just wrapper for :c:func:`glm_lookat`. Sometimes you only have direction
- instead of target, so that makes easy to build view matrix using direction.
- There is also :c:func:`glm_look_anyup` function which can help build view matrix
- without providing UP axis. It uses :c:func:`glm_vec3_ortho` to get a UP axis and
- builds view matrix.
- You can also *_default* versions of ortho and perspective to build projection
- fast if you don't care specific projection values.
- *_decomp* means decompose; these function can help to decompose projection
- matrices.
- **NOTE**: Be careful when working with high range (very small near, very large
- far) projection matrices. You may not get exact value you gave.
- **float** type cannot store very high precision so you will lose precision.
- Also your projection matrix will be inaccurate due to losing precision
- Table of contents (click to go):
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Functions:
- 1. :c:func:`glm_frustum`
- #. :c:func:`glm_ortho`
- #. :c:func:`glm_ortho_aabb`
- #. :c:func:`glm_ortho_aabb_p`
- #. :c:func:`glm_ortho_aabb_pz`
- #. :c:func:`glm_ortho_default`
- #. :c:func:`glm_ortho_default_s`
- #. :c:func:`glm_perspective`
- #. :c:func:`glm_persp_move_far`
- #. :c:func:`glm_perspective_default`
- #. :c:func:`glm_perspective_resize`
- #. :c:func:`glm_lookat`
- #. :c:func:`glm_look`
- #. :c:func:`glm_look_anyup`
- #. :c:func:`glm_persp_decomp`
- #. :c:func:`glm_persp_decompv`
- #. :c:func:`glm_persp_decomp_x`
- #. :c:func:`glm_persp_decomp_y`
- #. :c:func:`glm_persp_decomp_z`
- #. :c:func:`glm_persp_decomp_far`
- #. :c:func:`glm_persp_decomp_near`
- #. :c:func:`glm_persp_fovy`
- #. :c:func:`glm_persp_aspect`
- #. :c:func:`glm_persp_sizes`
- Functions documentation
- ~~~~~~~~~~~~~~~~~~~~~~~
- .. c:function:: void glm_frustum(float left, float right, float bottom, float top, float nearVal, float farVal, mat4 dest)
- | set up perspective peprojection matrix
- Parameters:
- | *[in]* **left** viewport.left
- | *[in]* **right** viewport.right
- | *[in]* **bottom** viewport.bottom
- | *[in]* **top** viewport.top
- | *[in]* **nearVal** near clipping plane
- | *[in]* **farVal** far clipping plane
- | *[out]* **dest** result matrix
- .. c:function:: void glm_ortho(float left, float right, float bottom, float top, float nearVal, float farVal, mat4 dest)
- | set up orthographic projection matrix
- Parameters:
- | *[in]* **left** viewport.left
- | *[in]* **right** viewport.right
- | *[in]* **bottom** viewport.bottom
- | *[in]* **top** viewport.top
- | *[in]* **nearVal** near clipping plane
- | *[in]* **farVal** far clipping plane
- | *[out]* **dest** result matrix
- .. c:function:: void glm_ortho_aabb(vec3 box[2], mat4 dest)
- | set up orthographic projection matrix using bounding box
- | bounding box (AABB) must be in view space
- Parameters:
- | *[in]* **box** AABB
- | *[in]* **dest** result matrix
- .. c:function:: void glm_ortho_aabb_p(vec3 box[2], float padding, mat4 dest)
- | set up orthographic projection matrix using bounding box
- | bounding box (AABB) must be in view space
- this version adds padding to box
- Parameters:
- | *[in]* **box** AABB
- | *[in]* **padding** padding
- | *[out]* **dest** result matrix
- .. c:function:: void glm_ortho_aabb_pz(vec3 box[2], float padding, mat4 dest)
- | set up orthographic projection matrix using bounding box
- | bounding box (AABB) must be in view space
- this version adds Z padding to box
- Parameters:
- | *[in]* **box** AABB
- | *[in]* **padding** padding for near and far
- | *[out]* **dest** result matrix
- Returns:
- square of norm / magnitude
- .. c:function:: void glm_ortho_default(float aspect, mat4 dest)
- | set up unit orthographic projection matrix
- Parameters:
- | *[in]* **aspect** aspect ration ( width / height )
- | *[out]* **dest** result matrix
- .. c:function:: void glm_ortho_default_s(float aspect, float size, mat4 dest)
- | set up orthographic projection matrix with given CUBE size
- Parameters:
- | *[in]* **aspect** aspect ration ( width / height )
- | *[in]* **size** cube size
- | *[out]* **dest** result matrix
- .. c:function:: void glm_perspective(float fovy, float aspect, float nearVal, float farVal, mat4 dest)
- | set up perspective projection matrix
- Parameters:
- | *[in]* **fovy** field of view angle (in radians)
- | *[in]* **aspect** aspect ratio ( width / height )
- | *[in]* **nearVal** near clipping plane
- | *[in]* **farVal** far clipping planes
- | *[out]* **dest** result matrix
- .. c:function:: void glm_persp_move_far(mat4 proj, float deltaFar)
- | extend perspective projection matrix's far distance
- | this function does not guarantee far >= near, be aware of that!
- Parameters:
- | *[in, out]* **proj** projection matrix to extend
- | *[in]* **deltaFar** distance from existing far (negative to shink)
- .. c:function:: void glm_perspective_default(float aspect, mat4 dest)
- | set up perspective projection matrix with default near/far
- and angle values
- Parameters:
- | *[in]* **aspect** aspect aspect ratio ( width / height )
- | *[out]* **dest** result matrix
- .. c:function:: void glm_perspective_resize(float aspect, mat4 proj)
- | resize perspective matrix by aspect ratio ( width / height )
- this makes very easy to resize proj matrix when window / viewport reized
- Parameters:
- | *[in]* **aspect** aspect ratio ( width / height )
- | *[in, out]* **proj** perspective projection matrix
- .. c:function:: void glm_lookat(vec3 eye, vec3 center, vec3 up, mat4 dest)
- | set up view matrix
- **NOTE:** The UP vector must not be parallel to the line of sight from the eye point to the reference point.
- Parameters:
- | *[in]* **eye** eye vector
- | *[in]* **center** center vector
- | *[in]* **up** up vector
- | *[out]* **dest** result matrix
- .. c:function:: void glm_look(vec3 eye, vec3 dir, vec3 up, mat4 dest)
- | set up view matrix
- convenient wrapper for :c:func:`glm_lookat`: if you only have direction not
- target self then this might be useful. Because you need to get target
- from direction.
- **NOTE:** The UP vector must not be parallel to the line of sight from the eye point to the reference point.
- Parameters:
- | *[in]* **eye** eye vector
- | *[in]* **dir** direction vector
- | *[in]* **up** up vector
- | *[out]* **dest** result matrix
- .. c:function:: void glm_look_anyup(vec3 eye, vec3 dir, mat4 dest)
- | set up view matrix
- convenient wrapper for :c:func:`glm_look` if you only have direction
- and if you don't care what UP vector is then this might be useful
- to create view matrix
- Parameters:
- | *[in]* **eye** eye vector
- | *[in]* **dir** direction vector
- | *[out]* **dest** result matrix
- .. c:function:: void glm_persp_decomp(mat4 proj, float *nearVal, float *farVal, float *top, float *bottom, float *left, float *right)
- | decomposes frustum values of perspective projection.
- Parameters:
- | *[in]* **eye** perspective projection matrix
- | *[out]* **nearVal** near
- | *[out]* **farVal** far
- | *[out]* **top** top
- | *[out]* **bottom** bottom
- | *[out]* **left** left
- | *[out]* **right** right
- .. c:function:: void glm_persp_decompv(mat4 proj, float dest[6])
- | decomposes frustum values of perspective projection.
- | this makes easy to get all values at once
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[out]* **dest** array
- .. c:function:: void glm_persp_decomp_x(mat4 proj, float *left, float *right)
- | decomposes left and right values of perspective projection.
- | x stands for x axis (left / right axis)
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[out]* **left** left
- | *[out]* **right** right
- .. c:function:: void glm_persp_decomp_y(mat4 proj, float *top, float *bottom)
- | decomposes top and bottom values of perspective projection.
- | y stands for y axis (top / botom axis)
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[out]* **top** top
- | *[out]* **bottom** bottom
- .. c:function:: void glm_persp_decomp_z(mat4 proj, float *nearVal, float *farVal)
- | decomposes near and far values of perspective projection.
- | z stands for z axis (near / far axis)
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[out]* **nearVal** near
- | *[out]* **farVal** far
- .. c:function:: void glm_persp_decomp_far(mat4 proj, float * __restrict farVal)
- | decomposes far value of perspective projection.
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[out]* **farVal** far
- .. c:function:: void glm_persp_decomp_near(mat4 proj, float * __restrict nearVal)
- | decomposes near value of perspective projection.
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[out]* **nearVal** near
- .. c:function:: float glm_persp_fovy(mat4 proj)
- | returns field of view angle along the Y-axis (in radians)
- if you need to degrees, use glm_deg to convert it or use this:
- fovy_deg = glm_deg(glm_persp_fovy(projMatrix))
- Parameters:
- | *[in]* **proj** perspective projection matrix
- Returns:
- | fovy in radians
- .. c:function:: float glm_persp_aspect(mat4 proj)
- | returns aspect ratio of perspective projection
- Parameters:
- | *[in]* **proj** perspective projection matrix
- .. c:function:: void glm_persp_sizes(mat4 proj, float fovy, vec4 dest)
- | returns sizes of near and far planes of perspective projection
- Parameters:
- | *[in]* **proj** perspective projection matrix
- | *[in]* **fovy** fovy (see brief)
- | *[out]* **dest** sizes order: [Wnear, Hnear, Wfar, Hfar]
|