I’m pretty bad at book learnin’. This fact greatly detracts from my productivity. If I were more able to learn new coding concepts from a book, I would be so much further along in my studies. I prefer to learn by stumbling around in the dark. And here is why…
Going from A to B to C just doesn’t offer the right amount of instant gratification. If you are at all like me, you have bought many a coding manual only to shelve it after a couple hours. Those of us that gain energy from creating compelling visuals will end up feeling a bit sleepy at the prospect of spending a couple hours learning how to print “Hello world.” to the console. I want to learn K then Q then U and V. Perhaps then, I will go back and see what A, B, and C were all about.
It is a battle of opposites. Science versus faith. Order versus chaos. Left-brain versus right. Directed learning versus wild experimentation. The point of this post is to celebrate experimentation. While instruction-by-manual most definitely has its place, this is no reason to ignore your baser urge to just create something pretty, even if you don’t understand how. It is a cycle. Wild experimentation can lead to beautiful and unplanned results which can inspire you to learn more of the basics from a book which will frustrate you into going back to wild experimentation. Over and over again. But with each return to experimentation, you end up building on a more solid foundation. Your work will grow more refined. And more importantly, you will stop pestering Andrew Bell with stupid questions that chapter two of any C++ book would have answered.
Over the years, I find myself going back to the same online resources to learn specific things which one might not cover until chapter 14 of the corresponding manual. I wanted to take the time to share some of these online gems. Some are tutorials, some are resources, and some are just plain confusing, but they have all helped me along my journey and I would like to acknowledge them here.
THE BASICS
First up, Daniel Shiffman’s Nature of Code. Daniel teaches at NYU’s ITP program. He has created some beautiful work and is currently best known for his Most Pixels Ever project. Since I started to get more interested in particle engines and forces, Daniel’s source code examples have been invaluable in getting acquainted with how particle engines and forces should be coded. Highly recommended for those looking for a good place to start.
It feels weird to throw a fairly boggling C++ link so early into this post but it fits with the theme of Basics. Fellow Barbarian Keith Butters pointed me to this page when I was thinking of making the transition from Java to C++. Arguably, the most upsetting part of learning C++ is getting the hang of ‘pointers’. This link will help to explain pointers in a way that minimizes screaming.
OPENGL
Next, the best known OpenGL tutorials on the web. NeHe. The Neon Helium tutorials pop to the top of Google when you search for ‘OpenGL tutorial’, and rightly so. There are nearly 50 chapters of GL wisdom presented in reasonably bite-sized portions. They cover everything from simply opening a new GL view to implementing vertex and fragment shaders. And if JOGL is more your thing, Pepe and Lizzie have posted Java OpenGL ports of most of the NeHe chapters.
Recently, I wanted to learn more about GL lighting because it was something I never took the time to properly learn. I came across this nice write-up by Greg Sidelnikov. He describes the theory behind lighting and proceeds to explore what this means in OpenGL context. A quick but thorough read. Don’t forget to notice that he wrote it while in high-school. Damned early bloomers.
GLSL
Lighting makes for a nice transition to GLSL tutorials. Lighthouse 3D has a great primer for getting started with shaders. They break it down into a very easily managed series of progressively harder examples, ranging from simple toon shaders to more complex directional spotlight implementations.
TERRAIN
Lighthouse 3D also has a really nice series on terrain generation, a new love of mine. Oh, and speaking of terrain generation, Shamus Young has a really good article which discusses the process of going from standard high-vertex grid mesh terrain to one just as detailed but with 10% of the original vertex count. There are no code snippets, just theory, but it is still an engaging read.
Another must read for those interested in terrain generation and population is an article I found over at the Unify Wiki. It is a wonderful summary of the obstacles you will likely encounter when coding your own terrain engine from scratch.
TEXTURES
Of course, when working with these shaders and terrain engines you will likely have a need for interesting textures. I have a few links to help with that. At the top of the list is Filter Forge. It is an application (or plugin) with a node-based graphical GUI which can help you create tiled textures, complete with bump, normal, diffuse, and specular texture generation. If you are looking to learn more about using maps for lighting effects, I highly recommend starting with Filter Forge.
Another competing product is Peacock by Aviary. I have not used it yet, but the incredibly talented Mario Klingemann is behind it so I would guess it is insanely powerful and well rounded, just like Mario himself.
If tiled textures aren’t exactly what you need, perhaps give Turbosquid a shot. I recently found myself in need of a nice photo of wheat that I could use in my terrain simulation. I tried making my own but it just didn’t work well and I had better ways to use my time. Turbosquid to the rescue. Granted, you have to pay for the content and often the content is way overpriced for the quality. But hunt around and you will probably find something that will work fine. Paying $10 for a high-res texture is easily worth it if you consider how long it would have taken to create the same image from scratch.
PLANETARY TEXTURE MAPS
If it is Earth textures you need, look no further than Blue Marble, a NASA initiative. There are some seriously high-res textures of the Earth, some as large as 86400×43200 pixels. The usage license is lenient and the quality is superb. If your needs are more other-wordly, try the planetary maps at Steve Albers’ site.
iPHONE
Finally, for those in need of some iPhone development assistance, I recommend two sites. Keith Peters has posted a nice starter tutorial for those interested in developing iPhone apps. I used it to get started and it was easy to follow and perfectly paced. Once you start making your own iPhone applications, you will likely need to learn more about OpenGL ES (think of it as OpenGL-lite for devices). Simon Maurice has an ongoing series of mini tutorials for developing with GL-ES for iPhone. Highly recommended.
SUMMARY
Hopefully these links will help you as much as they have helped me. Keep in mind, these are not a substitute for traditional book learnin’. Ideally, they will be used in conjunction with painfully boring coding books like 3D Math Primer for Graphics and Game Development, C++ Without Fear, and the Orange Book. Together, they should be enough for you to code your way to heaven.
DISCLAIMER
This list is not exhaustive. Undoubtedly, I have forgotten quite a few folks that have helped me over the years. If you know of any useful tutorial or resource sites, send me an email ( robert@ ). I will start compiling a list for a followup post.
LINK LIST
Basics
Daniel Shiffman
C++ Pointers
OpenGL
NeHe
NeHe JOGL
Greg Sidelnikov lighting
GLSL
Lighthouse 3D GLSL
Terrain
Lighthouse 3D Terrain
Shamus Young
Unity Wiki
Textures
Filter Forge
Aviary Peacock
Turbosquid
Planetary Texture Maps
NASA Blue Marble
Steve Albers planetary maps
iPhone
Keith Peters
Simon Maurice