Projection matrices

The projection matrix is used to project all points from the bounded volume onto a plane.

There are two types of projection: perspective and orthogonal. In perspective projection far objects look smaller, and nearby objects larger.

One way to bound volume is to use six planes:

  • r - the right plane
  • l - the left plane
  • t - the top plane
  • b - the bottom plane
  • f - the far plane
  • n - the near plane to which we will project
projection
perspective projection
| 2*n/(r-l)  0          (r+l)/(r-l)    0          |
|   0       2*n/(t-b)   (t+b)/(t-b)    0          |
|   0       0           (f+n)/(n-f)   -2*f*n/(f-n)|
|   0       0          -1             0           |
orthogonal projection
| 2/(r-l)   0          0         (r+l)/(r-l)|
|   0      2/(t-b)     0         (t+b)/(t-b)| 
|   0       0        -2*f/(f-n)  (f+n)/(f-n)|
|   0       0          0             1      |

Other way to bound volume is to use near/far planes and vertical field of view:

  • n - the near plane to which we will project
  • f - the far plane
  • ar - the ratio between the width and the height of the rectangular area which will be the target of projection
  • α - vertical field of view (FOVy on image), the vertical angle of the camera through which we are looking at the world

In this case, the matrix will look like this

perspective projection
| 1/(ar*tan(α/2))  0             0                 0     |
|   0            1/tan(α/2)      0                 0     |
|   0              0        (-n-f)/(n-f)     -2*f*n/(n-f)|
|   0              0             1                 0     |