Module graphics

Source
Expand description

General graphics-related utility functions

§Coordinates

The gl_Position output of the last GLSL vertex processing stage (vertex shader, tessellation shader, or geometry shader) is in clip space, that is 4D homogeneous (projective) coordinates (x, y, z, w). During vertex post-processing, clip space coordinates are transformed to normalized device coordinates (NDCs) by perspective divide and clipped to the range [-1.0, 1.0] in the x, y, and z coorinates. Finally the viewport transform takes NDCs and outputs screen space (or window space) coordinates, which are 2D device coordinates + a 1D depth coordinate, on which rasterization is performed to produce fragments.

2D

2D x,y coordinates normalized to [-1.0, 1.0] can be passed through to vertex post-processing unmodified. This is the case with shader pipelines that specify inputs are in “ClipSpace”; the pass-thru vertex shader will add a z component of 0.0 and a w component of 1.0.

(Note: as of v0.6.0 none of the default draw2d resources use clip space rendering pipelines)

Even though the ultimate output of vertex post-processing is 2D screen space (device) coordinates, in order to render screen-space input vertices, they must be transformed to clip space by vertex processing. Two utility functions are provided to convert between screen space and normalized coordinates: graphics::screen_2d_to_ndc_2d and graphics::ndc_2d_to_screen_2d. Both require screen dimensions as input.

Functions§

ndc_2d_to_screen_2d
Maps OpenGL NDC coordinates to screen coordinates based on a given screen resolution.
projection_mat_orthographic
Convenience method that calls math::orthographic_rh_no on the given FrustmPlanes struct
projection_mat_perspective
Convenience method calling Matrix4::perspective_rh_no to construct a right-handed perspective matrix with -1 to 1 clip planes, equivalent to the gluPerspective function.
screen_2d_to_ndc_2d
Convert screen coordinate to OpenGL NDC based on a given screen resolution.