14 of 14 people found the following review helpful
Still the definitive guide to OpenGL, but I wonder if this book has reached its "give up writing it" date,
Amazon Verified Purchase(What is this?)
This review is from: OpenGL Programming Guide: The Official Guide to Learning OpenGL, Versions 3.0 and 3.1 (Paperback)This book is, without a doubt, the best guide you can buy to learning basic OpenGL.
The early chapters take the reader through the essential elements of computer graphics (colour, lighting, drawing primitive objects, transformations, viewing), then later chapters deal with more specialised techniques such as texture wrapping, accessing the hardware buffers, picking and analytical surfaces. Each chapter has copious examples that are well written, clearly explained and have easy to understand example code. The author provides sufficient maths to explain why the major aspects of OpenGL are the way they are (for example how to compute normals and viewing transformations) and gives references to more arcane mathematical topics (eg Bezier patches and Nurbs surfaces). If you work your way through this book, or even just the first half of it + the appendices, you really will understand computer graphics.
The book also deals briefly with the extension libraries required to use OpenGL on the various different hardware platforms you will encounter: Windows, Unix/Linux and Mac. It also describes the utility GLU library that makes using OpenGL easier.
The reader will need to be reasonably familiar with the C programming language, and all the examples are written in C, but users of other languages should not have much trouble dealing with this.
So why am I a bit luke-warm about it?
The problem is that OpenGL is mutating rather faster than this book can be updated. This 7th edition, published in Autumn 2009, refers to OpenGL releases 3.0 and 3.1; but release 3.2 was already available when it appeared, and at the time of writing this review (March 2010) release 4.0 has just been announced.
If you just want to learn basic OpenGL this is fine, but if you are a developer who needs to exploit the latest and greatest features of the language you find yourself in the position of having to spend a lot of money on a book only to find that it is already out of date. I have a succession of these "red books" on my shelf dating back 15 or so years now, and each time I buy a copy I read less and less of the incremental information it contains.
For example the current trend is away from the traditional method of "construct a primitive object and send it to the graphics card to draw" towards a different model of "tell the graphics card where to find my information, and also compile a programme on it to render this". Or in OpenGL-speak from immediate mode rendering using the fixed graphics pipeline towards programmable shaders using GL Shading Language (GLSL).
The author has tackled this issue as well as he can, but he faces the twin problems that not only does he not have enough space to do it justice (this edition is already 55mm thick), but also he cannot keep up with the development of OpenGL. In addition much of the traditional way of drawing things is "deprecated" from OpenGL 3.0 onwards, which leaves the author in the unenviable position of having to explain how everything works in his early chapters while simultaneously remarking that things should no longer be done this way! (Personally I think the traditional methods will still be around long after I'm dead, and I have no intention of dying any time soon...)
Through no fault of his own he is in danger of growing this book to the point where it is too big and expensive for a beginner while still being inadequate for an advanced user.
Perhaps it needs to become a hybrid paper (basics) and online reference (advanced + latest & greatest) document. Certainly *someone* needs to gather all the documentation on OpenGL together into a single place, and I can't think of anyone better qualified than the author to do this, I'm just no longer sure that a book is - on its own - enough to do the job.