When someone at No Starch Press asked me if I wanted to review a book about graphics programming, I thought, "Sure. I worked with a company that built a graphics library in 1990. I know about this." My real clue as to how the book would go was when Gambetta wrote that he'd be using just one graphics primitive: PutPixel. This really was going to be "from scratch".
Gambetta was both a game designer and an instructor who taught a third-year programming classes for five years in rendering graphics. His writing is clear, and his explanations follow logically as he builds, step-by-step, two different systems for rendering 3D objects. He starts out by explaining the coordinate system for the Canvas, where the pixels are drawn. Then he mentions you can review linear algebra by reading a short appendix.
I read the appendix, and you do need to understand some linear algebra principles, because to understand Gambetta's math, you need to understand vector manipulation. That's really easier than it sounds, and I had learned what I needed during two weeks in high school. But his refresher was nice, and I did have to be reminded of things like a dot product.
The rest of the book is divided into two big sections, one for raytracing and the other for rasterization. With raytracing, a camera looks through a viewport, represented by the canvas, at 3D objects. A pixel written to the canvas represents the color of each pixel as if a ray, or better, vector, had been drawn from the camera through each pixel in the canvas to the objects to be rendered. Gambetta uses short chapters, each building equations and pseudo-code for accomplishing a particular task, such as determing the amount of light falling on an object, and how that light gets reflected back to the camera.