These are a list of programming (graphics and otherwise) that I found very useful while learning to program (and many I still continue to use often.)

General Programming

Complete C++ Language Tutorial   Useful if you don't know very much about C++ programming, or want a quick reference for a specific aspect of the language.

The Function Pointer Tutorials   A function pointer is a variable that stores a specific type of function's location in memory. They are very useful so that data structures can generalize to an arbitrary external function, rather than a clumsy series of "if" statements to get your code to use the function you want when you want it to. I never remember the format for these function pointers, so I come here whenever I need to look it up.

Lore's Source to HTML Converter   Converts any type of source code to HTML, reproducing almost any color scheme you might want. Very useful if you want to put your code online; all the code on this site was converted using it.

Graphics Programming

NeHe's OpenGL Tutorials   Nothing could be better than NeHe for learning OpenGL from only a basic knowledge of C/C++. To avoid getting overwhelmed by all the Windows stuff, I think it's best to start in GLUT; you'll find a link to a GLUT version of the code at the bottom of each tutorial (or you could just follow along with the Mac OS X tutorial, as it uses GLUT.) Since DirectX can be rather daunting in the beginning, OpenGL is probably the best place to start as it involves much less code.

The DirectX SDK   Just follow the Download links to get to the DirectX SDK itself. Necessary to write any DirectX code. The code demos are also very informative, and include audio, video, music, networking, etc. information as well. Even if you don't want to learn DirectX, you'll find the documentation to often be very general when it comes to topics like the world, view, and perspective transforms, or lighting calculations. You can get the documentation without actually getting the SDK; it's a very useful reference.

Gamasutra   A website for game developers. The programming features go way back to very early games and problems, and contain very valuable and often implementation-oriented issues. I first learned about marching cubes, NURBS, and spring models here.


Much can be learned from academic papers pertaining to computer graphics. These are some papers (or groups of papers) I find useful.

Caltech Multi-Res Modeling Group   My own school's papers. Most of them are quite useful, if a bit advanced.

Fast Texture Synthesis using Tree-structured Vector Quantization   Addresses the problem of "Given a photo that is a small section of metal, produce an arbitrarily large amount of metal-looking texture." Quite impressive pictures.

Interactive Synthesis of Natural Textures   A different, faster (although not necessarily better) version of the texture above. For a class I implemented this paper and the one above and tested them on several textures.

Suggestive Contours   Suggestive Contours are used for taking 3D shapes and reducing them down to line drawings. The most useful paper for me is the first one, Suggestive Contours for Conveying Shape .

Mean Curvature Flow   Mean Curvature Flow is a very elegant way of doing mesh smoothing. Also not very hard to implement explicitly if you have a good (connectivity-based) mesh structure. A bit trickier if you want an implicit implementation.

Mesh Paramaterization   A mesh represents a 2D surface. In countless applications, we want to wrap a 2D texture over the mesh surface. This is built into many modeling packages (Maya, 3D Studio Max,) but sometimes these algorithms do not work very well. This paper describes a very nice algorithm to give very nice paramaterizations. There really isn't any way of saying one algorithm is superior, however; some distortion of the original texture will always occur.

Conjugate Gradient Descent Optimization   A very popular method for trying to find the global minimum of an arbitrary function of N variables is conjugate gradient descent. The first paper on this site is a good introduction to this method.

Cloth Simulation   Cloth can be a very tricky thing to simulate, because most good models tend to create explosive cloth. This paper gives a very stable algorithm for cloth simulation, but it is rather hard to implement.

Image Based Flow Visualization   This gives a good and extremely fast algorithm for visualizing fluid flow. Has a very nice and easy to use implementation as well.


Often, algorithms are designed to work on an arbitrary mesh. Thus, to demonstrate a given algorithm, it helps to have some meshes lying around to test them on. Provided here are a few meshes I found on the net at The *.obj file format is very simple; just look at a few examples (like the tetrahedron.)