# Viewport NDC in OpenGL ranges from -1 to 1, and depth buffer ranges from 0 to 1. NDC will be transformed once again to Window (Screen) coordinates. (It's called Viewport Transform.) Then, the z (depth) value finally becomes from 0 to 1, here is how it works: ```cpp glViewport(x, y, w, h); glDepthRange(n, f); ``` $$ \begin{bmatrix}x_w \\y_w \\z_w \\\end{bmatrix} = \begin{bmatrix} \frac{w}{2}x_n + \left( x + \frac{w}{2} \right) \\ \frac{h}{2}y_n + \left( y + \frac{h}{2} \right) \\ \frac{(f - n)}{2}z_n + \frac{(f + n)}{2} \\ \end{bmatrix} $$ ## Reference http://www.songho.ca/opengl/gl_transform.html#wincoord ###### tags: `OpenGL`