Computer graphics is one of the most rewarding fields to learn in order, because every advanced technique rests on a specific piece of math and a specific earlier idea. Jump to a shader tutorial without the linear algebra and you copy code you cannot modify. Build the foundation first and you can invent, not just imitate.
The arc runs from fundamentals and math, through the elegant simplicity of ray tracing, to physically based and real-time rendering, and finally to advanced GPU techniques.
Fundamentals and math
Start with Fundamentals of Computer Graphics, the standard text that covers the whole pipeline — transformations, rasterization, shading, cameras. Read it alongside 3D math primer for graphics and game development, which drills the vectors, matrices, and quaternions that graphics runs on. Get comfortable here and everything downstream is far easier.
Learn by ray tracing
Ray tracing is the best way to actually build a renderer. Ray Tracing in One Weekend is a beloved, hands-on project that produces real images fast and cements the concepts. Follow it with Physically Based Rendering — the extraordinary, literate-programming book that is both a textbook and a complete renderer — to understand how light behaves and how film-quality images are made.
Real-time rendering
Games and interactive apps need speed. Real-Time Rendering, Fourth Edition is the encyclopedic reference for rendering fast, covering the GPU pipeline, lighting, and optimization. Pair it with The Book of Shaders, a friendly, interactive introduction to writing the fragment shaders that produce real-time visual effects.
Advanced GPU techniques
Finally, go deep. GPU gems 2 and GPU Pro 360 Guide to Rendering are collections of professional techniques straight from industry practitioners. Advanced global illumination rigorously covers realistic light transport, and Ray Tracing Gems brings the classic technique into the modern GPU-accelerated era. Read these last, as targeted deep dives once the foundations are solid.
Graphics leans heavily on math and performance-minded programming, so a language like Julia or strong C++ makes the later books easier to apply in practice.