Cass and Doug Everitt at Yellowstone during the '98 Motorcycle Adventure (5000 miles!).

OpenGL Demos I've Written

Orthogonal Illumination Mapping - multipass dot product
There's a lot of hardware out there these days that will do per-pixel dot products and other cool stuff, but there is still a lot of hardware that has little more than core OpenGL 1.1 functionality. A technique is presented that approximates per-pixel dot product without special hardware. These demos were developed in support of of my master's thesis work on per-pixel lighting at Mississippi State.

You can find links on this page to a draft of my thesis as well as some powerpoint slides from a GDC talk I gave on this material. Of course, the demos are available as well.

For historical purposes, you may want to look at the initial (and less developed) posting of this work here.

Cubic Environment Mapping on a TNT
It's not necessarily the smartest thing to do, but you can do cubic environment mapping without EXT_texture_cube_map. The reason this demo is worthwhile is that you can get a feel for how cube mapping works even if you don't have a GeForce, and maybe more importantly, see that you can implement a lot of interesting rendering techniques using multiple rendering passes. Just because the hardware doesn't support it directly doesn't mean it can't be done! This technique requires 6 passes. You can toggle on/off any of the cubemap passes and tweak some of the parameters that effect how well the cube faces abut (insert Beavis and Butthead laugh).
Click here to download the project. No description page for this yet. Use the source. :-)

NOTE: There is a bug in the 3.x Detonator drivers that produces incorrect results on GeForce (but not TNT/TNT2). It has been corrected in the 5.x drivers which should be available soon.

Cool Shadowing Effects on TNT and up
You can do some really neat shadow casting effects with nothing more than a TNT! This program illustrates the shadow casting technique and the description page links to sources of documentation that describe how to implement it.

click here for the latest source - which fixes a minor z-fighting issue on TNT using polygon offset. This problem did not exist on my GeForce. Those invariance rules can be important. :-)

Simple Projective Texturing Example
Projective texturing is really cool. This demo started out as an exercise for my own education, and grew into the aforementioned shadow casting program. This code is really small and readable (I think), so if you're interested in projective texturing, this may help you get a handle on it.

Dynamic View-Independent Reflection Mapping -- under construction
I'm making some changes to this demo, to make it more correct and easier to use. The link here should be of some value, but the up-to-date version of this demo is not ready yet.

The Q Texture Coordinate
This demo illustrates a simple example of using the Q texture coordinate so that geometry tesselation isn't apparent. The polygon looks like it's going off into the distance, but it is really a trapezoid in the Z=0 plane.

I have some guests that share my office window sill. It's pretty neat watching the parents feed the babies. They're growing FAST. They only hatched last week!

My lovely daughters, Logan (left) and Cameron (right) at my thesis defense.

Perl Bindings for OpenGL:
OpenGL - OpenGLU - GLUT 

More recent perl bindings for OpenGL can be found at

Use these perl bindings to your OpenGL libraries to write simple demonstration scripts, make event-driven programs (with GLUT), or embed an OpenGL interpreter into your existing application!
Requires GL1.1, GLU 1.1, and GLUT 4 (or 3 with glutInitDisplayString()).
Here are a couple of example scripts: -- just the basics -- a few extras -- from Mark Kilgard's glut examples

Check out our family photos.