For your convenience Apress has placed some of the front
matter material after the index. Please use the Bookmarks
and Contents at a Glance links to access them.
iv
Contents at a Glance
■About the Author ............................................................................................. ix
■About the Technical Reviewer ......................................................................... x
■Acknowledgments .......................................................................................... xi
■Introduction ................................................................................................... xii
■Chapter 1: Computer Graphics: From Then to Now .......................................... 1
■Chapter 2: All That Math Jazz ........................................................................ 33
■Chapter 3: Building a 3D World ...................................................................... 51
■Chapter 4: Turning On the Lights ................................................................... 91
■Chapter 5: Textures ...................................................................................... 133
■Chapter 6: Will It Blend? .............................................................................. 167
■Chapter 7: Well-Rendered Miscellany .......................................................... 201
■Chapter 8: Putting It All Together ................................................................ 245
■Chapter 9: Performance ’n’ Stuff ................................................................. 289
■Chapter 10: OpenGL ES 2, Shaders, and… ................................................... 307
■Index… ........................................................................................................ 341
xii
Introduction
In 1985 I brought home a new shiny Commodore Amiga 1000, about one week after they were
released. Coming with a whopping 512K of memory, programmable colormaps, a Motorola 68K
CPU, and a modern multitasking operating system, it had “awesome” writ all over it.
Metaphorically speaking, of course. I thought it might make a good platform for an astronomy
program, as I could now control the colors of those star-things instead of having to settle for a
lame fixed color palette forced upon me from the likes of Hercules or the C64. So I coded up a 24-
line basic routine to draw a random star field, turned out the lights, and thought, “Wow! I bet I
could write a cool astronomy program for that thing!” Twenty-six years later I am still working on
it (I’ll get it right one of these days). Back then my dream device was something I could slip into
my pocket, pull out when needed, and aim it as the sky to tell me what stars or constellations I
was looking at.
It’s called the iPhone.
I thought of it first.
As good as the iPhone is for playing music, making calls, or jumping Doodles, it really shines
when you get to the 3D stuff. After all, 3D is all around us—unless you are a pirate and have taken
to wearing an eye patch, in which case you’ll have very limited depth perception. Arrrggghhh.
Plus 3D apps are fun to show off to people. They’ll “get it.” In fact, they’ll get it much more than,
say, that mulch buyer’s guide app all the kids are talking about. (Unless they show off their mulch
in 3D, but that would be a waste of a perfectly good dimension.)
So, 3D apps are fun to see, fun to interact with, and fun to program. Which brings me to this
book. I am by no means a guru in this field. The real gurus are the ones who can knock out a
couple of NVIDIA drivers before breakfast, 4-dimensional hypercube simulators by lunch, and
port Halo to a TokyoFlash watch before the evening’s Firefly marathon on SyFy. I can’t do that.
But I am a decent writer, have enough of a working knowledge of the subject to make me
harmless, and know how to spell “3D.” So here we are.
First and foremost this book is for experienced iOS programmers who want to at least learn a little
of the language of 3D. At least enough to where at the next game programmer’s cocktail party you
too can laugh at the quaternion jokes with the best of them.
■ INTRODUCTION
xiii
This book covers the basics in both theory of 3D and implementations using the industry
standard OpenGL ES toolkit for small devices. While iOS supports both flavors—version 1.x for
the easy way, and version 2.x for those who like to get where the nitty-is-gritty—I mainly cover
the former, except in the final chapter which serves as an intro to the latter and the use of
programmable shaders. And with the release of iOS 5, Apple has offered the 3D community a
whole lotta lovin’ with some significant additions to the graphics libraries.
Chapter 1 serves as an intro to OpenGL ES alongside the long and tortuous path of the history of
computer graphics. Chapter 2 is the math behind basic 3D rendering, whereas Chapters 3
through 8 lead you gently through the various issues all graphics programmers eventually come
across, such as how to cast shadows, render multiple OpenGL screens, add lens flare, and so on.
Eventually this works its way into a simple (S-I-M-P-L-E!) solar-system model consisting of the
sun, earth, and some stars—a traditional 3D exercise. Chapter 9 looks at best practices and
development tools, and Chapter 10 serves as a brief overview of OpenGL ES 2 and the use of
shaders.
So, have fun, send me some M&Ms, and while you’re at it feel free to check out my own app in the
Appstore: Distant Suns 3 for both the iPhone and the iPad. Yup, that’s the same application that
started out on a Commodore Amiga 1000 in 1985 as a 24-line basic program that drew a couple
hundred random stars on the screen.
It’s bigger now.