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 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);
- Parameters:
- [in] pos object coordinates[in] m MVP matrix[in] vp viewport as [x, y, width, height][out] dest projected coordinates
-
float
glm_project_z
(vec3 pos, mat4 m)¶ - map object’s z coordinate to window coordinates
this is same as
glm_project()
except this function projects only Z coordinate which reduces a few calculations and parameters.Computing MVP:
glm_mat4_mul(proj, view, viewProj); glm_mat4_mul(viewProj, model, MVP);
- Parameters:
- [in] pos object coordinates[in] m MVP matrix
- Returns:
- projected z coordinate