Canonical Space to Screen Space: Why do we have the strange -0.5? When we convert from canonical space to screen space,

To map x from -1 to 1 to 0 to width,

-1 &lt; x &lt; 1
0 &lt; x+1 &lt; 2
0 &lt; x+1/2 &lt; 1
0 &lt; (x+1)w/2 &lt; w
0 &lt; xw/2 + w/2 &lt; w


Similarly for y,

-1 &lt; y &lt; 1
0 &lt; y+1 &lt; 2
0 &lt; y+1/2 &lt; 1
0 &lt; (y+1)h/2 &lt; h
0 &lt; yh/2 + h/2 &lt; h




What is the reason behind choosing a screen that has (xmin, ymin) = (0.5, 0.5) and (xmax, ymax) = (1920 - 0.5, 1080 - 0.5) where (nx, ny) = (1920, 1080)?
I can't really answer this without the context so post some links where this is done.

What I can tell you is that the general formula for viewport transformation as done by OpenGL is given as (taken from wiki)



Here x,y are the what your picture says xmin, ymin and width, height is xmax, ymax. Now there is no specific reason I can think of why you would wanna do a shift of -0.5 but the viewport allows us to draw to a specific portion of the screen. 

For example, in video games you would want to draw the minimap on the lower left corner of the screen, hence you could provide the values

x = 0, y = 0, width = 200, height = 200 

This would render a 200x200 minimap in the lower left corner. Your second picture does this but instead it chooses a value of

x = -0.5, y = -0.5, width = nx, height = ny

If you substitute it in the above matrix you'll get

$ \frac{nx}{2} * x_{ndc} - \frac{1}{2} + \frac{nx}{2}$

for the $X$ value. This equals

$ \frac{nx}{2} * x_{ndc} + \frac{nx - 1}{2}$

Which is the same as what is done in the picture you posted. Hope it helped somewhat.

EDIT:- 0.5 offset is commonly used to get to the pixel center. See this image as an example.

Here the pixel 3,5 has the center 3.5, 5.5. This is the 0.5 offset you are seeing. I was confused at first when you were talking about an offset of negative 0.5.