Project / UnProject¶
Header: cglm/project.h
Viewport is required as vec4 [X, Y, Width, Height] but this doesn’t mean that you should store it as vec4. You can convert your data representation to vec4 before passing it to related functions.
Functions documentation¶
-
void
glm_unprojecti
(vec3 pos, mat4 invMat, vec4 vp, vec3 dest)¶ - maps the specified viewport coordinates into specified space [1] the matrix should contain projection matrix.
if you don’t have ( and don’t want to have ) an inverse matrix then use glm_unproject version. You may use existing inverse of matrix in somewhere else, this is why glm_unprojecti exists to save save inversion cost
- [1] space:
if m = invProj: View Space
if m = invViewProj: World Space
if m = invMVP: Object Space
You probably want to map the coordinates into object space so use invMVP as m
Computing viewProj:
glm_mat4_mul(proj, view, viewProj); glm_mat4_mul(viewProj, model, MVP); glm_mat4_inv(viewProj, invMVP);
- Parameters:
- [in] pos point/position in viewport coordinates[in] invMat matrix (see brief)[in] vp viewport as [x, y, width, height][out] dest unprojected coordinates
-
void
glm_unproject
(vec3 pos, mat4 m, vec4 vp, vec3 dest)¶ - maps the specified viewport coordinates into specified space [1] the matrix should contain projection matrix.
this is same as glm_unprojecti except this function get inverse matrix for you.
- [1] space:
if m = proj: View Space
if m = viewProj: World Space
if m = MVP: Object Space
You probably want to map the coordinates into object space so use MVP as m
Computing viewProj and MVP:
glm_mat4_mul(proj, view, viewProj); glm_mat4_mul(viewProj, model, MVP);
- Parameters:
- [in] pos point/position in viewport coordinates[in] m matrix (see brief)[in] vp viewport as [x, y, width, height][out] dest unprojected coordinates
-
void
glm_project
(vec3 pos, mat4 m, vec4 vp, vec3 dest)¶ - map object coordinates to window coordinates
Computing MVP:
glm_mat4_mul(proj, view, viewProj); glm_mat4_mul(viewProj, model, MVP);
this could be useful for gettng a bbox which fits with view frustum and object bounding boxes. In this case you crop view frustum box with objects box
- Parameters:
- [in] pos object coordinates[in] m MVP matrix[in] vp viewport as [x, y, width, height][out] dest projected coordinates