Default bounds

           1   1
          |   /
          |  /
          | /
          |/      
-1 --------------- 1
         /|
        / |
       /  |
      /   |
     -1   -1

Matrices

model: transforms each object separately
view: transforms the whole world

for instance, a positive x translation moves either one object or all objects on the screen to the right a certain distance.

If you want to transform the camera position or rotation, it should be the inverse of the transformations the view matrix is applying.

projection: Here's where the fun stuff begins
Viewing Frustum diagram is on page 99

I need to first implement the click detection function without applying the projection matrix

The click detection function uses ray tracing to figure out which object we hit

First, we need to generate the equation for the ray that starts at the camera position and through the point the user clicked. To do that, we need to turn the 2d point of the click into a 3d point on the near clipping plane.

Ray Equation:
R(t) = O+Dt

where R(t) defines all the points on the ray, O is the camera origin,
and D is the direction of the ray.

In this case, D = P-O, where P is the point the user clicked on in 3D space

Camera position = (0, 0, 0)
