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) BUFFER FUNCTIONS ----------------- glGenBuffers creates a buffer glBindBuffer sets the currently active buffer glBufferData populates the buffer with data glGenVertexArrays creates a vao glBindVertexArray sets the currently active vao glEnableVertexAttribArray sets the active index in the vao glVertexAttribPointer determines the layout of a buffer in a VAO -The last params (often NULL), specifies the offset in the buffer