The objective of this step is to find a transformation matrix to transform points expressed in normalized device coordinates to screen coordinates

$\mathbf{v}_{screen} = \mathbf{M}_{vp} \mathbf{v}_{ndc}$

The canonical view volume needs to be mapped to the screen that has $$n_x \times n_y$$ pixels in a way so that points with $$x = -1, x = 1$$ are mapped to the left and right sides of the screen respectively and $$y = -1, y = 1$$ are mapped to the bottom and top sides of the screen respectively, the $$z$$ coordinate isn't visible in a 2D image so it can be discarded for the mapping

Since the mapping is linear we can use the linear interpolation method

$f(x) = out_{lo} + (out_{hi} - out_{lo}) \frac{x - in_{lo}}{ in_{hi} - in_{lo} }$

Given

• $$out_{lo} = -0.5$$
• $$out_{hi} = n_x - 0.5$$
• $$in_{lo} = -1$$
• $$in_{hi} = 1$$

The value of $$x_{screen}$$ is

\begin{align*} x_{screen} &= -0.5 + n_x \frac{x_{ndc} + 1}{2} \\ &= -\frac{1}{2} + \frac{n_x}{2}x_{ndc} + \frac{n_x}{2} \\ &= \frac{n_x}{2}x_{ndc} + \frac{n_x - 1}{2} \end{align*}

The value of $$y_{screen}$$ is found in a similar way

$y_{screen} = \frac{n_y}{2}y_{ndc} + \frac{n_y - 1}{2}$

Finally the transformation matrix that converts points from NDC to screen coordinates is

$\mathbf{M}_{vp} = \begin{bmatrix} \frac{n_x}{2} & 0 & 0 & \frac{n_x - 1}{2} \\ 0 & \frac{n_y}{2} & 0 &\frac{n_y - 1}{2} \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}$

Note that the $$z$$-coordinate doesn't need to be modified since it doesn't affect the projection in the image, the $$z$$-coordinate is still used to check the order in which objects should be drawn

References
• Shirley, P. and Ashikhmin, M. (2005). Fundamentals of computer graphics. Wellesley, Mass.: AK Peters.