Sunday, November 15, 2009

You want to become a Graphics Programmer ...

I regularly receive e-mails with the question what kind of books I recommend if someone wants to become a graphics programmer. Here is my current list (maybe some of you guys can add to this list?):
First of all math is required:
- Vector Calculus
- Vector Calculus, Linear Algebra, and Differential Forms I have the 1999 version of this book
- Computer Graphics Mathematical First Steps
- Mathematics for Computer Graphics

For a general knowledge in programming the CPU:
- Write Great Code Volume 1: Understanding the Machine

For a better knowledge on how to program the GPU:
- DirectX documentation
- NVIDIA GPU Programming Guide
- ATI GPU Programming Guide

To learn about how to program certain effects in an efficient way:
- ShaderX - ShaderX7
- GPU Gems - GPU Gems 3
- GPU Pro and GPU Pro Blog

To start learning DirectX 10 API + Shader Programming:
- Introduction to 3D Programming with DirectX 10
- Programming Vertex, Geometry and Pixel Shaders

To start learning OpenGL & OpenGL ES:
- Khronos group

For general overview:
- Real-Time Rendering
- Fundamentals of Computer Graphics (this one also belongs in the math section)

To get started with C:
- C Programming Language

To learn C++
- C++ for Game Developers
- C++ Cookbook
- there is a long list of more advanced C++ books ...

25 comments:

  1. Do yourself a favor and don't buy Peter Shirley books if you are a beginner. Get "Interactive Computer Graphics: A Top Down Approach" by Angel. And "Realtime Rendering" rocks. :D

    I also liked "3D Math Primer".

    ReplyDelete
  2. "Real-Time Rendering" is in the list -> list is complete. :)

    ReplyDelete
  3. I like "Essential Mathematics for games & interactive applications" by Van Verth and Bishop. It has some good, easy to read explanations of a lot of graphics topics.

    Also, I think every programmer regardless of specialty should read "The Pragmatic Programmer" by Hunt & Thomas and "Code Complete" by McConnell.

    ReplyDelete
  4. I have a deep knowledge in the object oriented programming languages like C++, Java, Python etc. I don't want to become a graphic programmer.

    ReplyDelete
  5. Nothing on Win32 or other ways of interfacing with the OS? (Qt/Gtk/WxWidget/etc...?)

    ReplyDelete
  6. You are right, we could also name a few books here although I can't think of any of those in my hands for more than a decade.

    ReplyDelete
  7. I would add some books on painting and learning to draw. Heinrich Wölfflin's introductory essay on Dürer for example, and some minimal understanding of photo/cine lighting, because cg - REAL cg -- is about using complex processes to make colors to make pictures.

    ReplyDelete
  8. Speaking of books, is ShaderX8 set for release next month?

    Any particular article title you could single out? hehe

    ReplyDelete
  9. It is now called GPU Pro and in full-color and it will be released before GDC. You can read up already on the GPU Pro blog ... link is mentioned above.

    ReplyDelete
  10. This comment has been removed by the author.

    ReplyDelete
  11. For the mathematical part I can only recommend "Geometric Tools for Computer Graphics" as a thorough reference

    ReplyDelete
  12. Introduction to 3D Game Programming with Direct X 9.0c: A Shader Approach

    Me and several students (20+) at my school, DigiPen, have used this book to get introduced to Direct X 9. The book is simply an intro to Direct X, but it works great.

    ReplyDelete
  13. Both books Introduction to 3d games programming (dx9 and dx 10) from Frank Luna are very good (excellent reference and samples inside with a lot of basic interesting hlsl stuff)

    also Game graphics programming from Allen Sherrod is a very good book
    cause it has examples in opengl/dx9 and dx10
    Now if opengl is your flavour
    there is (more opengl programming by DAvid Astle) which is an excellent book
    covering opengl 2 and glsl
    plus some model and bsp/portal stuff

    ReplyDelete
  14. when i get asked this question... it is almost invariably by people who are not yet programmers.

    learn to be a programmer first

    then specialize.

    ReplyDelete
  15. Hi Wolfgang,

    has it a sense, in your opinion, to code graphics in "simple" C (instead of C++)?

    ReplyDelete
  16. This is still quite common. The C99 standard added a lot of good C++ features to the C language. Unfortunately I believe Visual Studio is still not C99 compatible. I used Pelles C for a while and it is a pleasure to work with C99.
    You keep your port more portable this way. For some environments, C is still the way to go.
    C# is for tools programming and for spare time programmers that don't care about being restricted to Microsoft Windows environments.

    C code is also easier portable to the iPhone. Obj-C++ does not support many C++ features.

    ReplyDelete
  17. I've not read RTCD in the list --> the list is incomplete!

    (Real Time Collision Detection)

    ReplyDelete
  18. This is a great book. I use it quite often. If you define graphics programming very narrow, than what you do is program the graphics card. Collision detection is traditionally handled on the CPU and is also now in the content of Physics engine packages. Therefore I would consider it a great candidate for a list of books named "You want to become a more experienced Graphics Programmer ...".

    ReplyDelete
  19. I think that the math in that book is necessary to became an advanced Graphics Programmer ;)

    ReplyDelete
  20. I remember when I used to suggest just "Computer Graphics by Foley, van Dam".
    A lot of time ago and for me that was THE book.
    Eheh, I'm getting nostalgic ;)

    ReplyDelete
  21. Thank you for taking the time to write about wanting to be graphics programmer. I found some of these books on my own and working through them. It is nice to see I am moving in the right direction.
    Thank you

    ReplyDelete
  22. This is all focused on interactive graphics programming. But there are still people taking their time to get more photo-realistic images. So here is some literature listing about offline rendering books.

    First - to get going:

    - Shirley & Morley, Realistic Ray Tracing
    - Suffern, Ray Tracing from the Ground Up
    - Jensen, Realistic Image Synthesis using Photon Mapping

    If you want it all put together nicely in literate programming and in depth theory:

    - Pharr & Humphries, Physically Based Rendering

    Looking at all the bunch of GI algorithms:

    - Dutré et al., Advanced Global Illumination

    And don't forget about realistic material models:

    - Rushmeyer et al., Digital Modeling of Material Appearance

    Some classics, still in print:

    - Glassner et al., An Introduction to Ray Tracing

    - Sillion & Puech, Radiosity and Global Illumination

    - Cohen & Wallace, Radiosity and Realistic Image Synthesis

    - Ward et al., Rendering with Radiance

    - Ebert et al., Modeling and Texturing - the Procedural Approach

    - Apodaca & Gritz, Advanced Renderman

    Get the free PDF+code for:

    - Ashdown, Radiosity - a Programmer's Perspective

    For some in depth details about implementing solid irradiance caching:

    - Krivanek et al., Practical Global Illumination with Irradiance Caching

    Some older textbooks about the fundamentals, beside Shirley etal.:

    - Watt, The Computer Image

    - Watt, 3D Computer Graphics

    - Watt & Watt, Advanced Animation and Rendering Techniques

    Don't buy them all, they are quite redundant. Look for what is right for your level, topic interests and learning style.

    ReplyDelete
  23. check www.scratchapixel.com to learn CG programming.

    ReplyDelete
  24. "Write Great Code" was superb, thanks for recommending it!

    ReplyDelete