Another stepping stone towards the 50 years of forward continuity of http://www.multicians.org/thvv/globe.html
More experimentation in the past week leads me to believe that GL_POLYGON and GL_QUAD_STRIP and the like do triangular decomposition... and get it wrong, somehow, because only some parts of various polygons go away with GL_CULL_FACE but some obvious triangles remain that clearly shouldn't. This seems to be consistent with accelerated and non-accelerated OpenGL in the server (discovered the latter when rolling back from a 2.6.22 kernel to 2.6.20, and forgetting to roll back the xorg-driver-fglrx package.) I'll have to try newer libraries.
The approach I'm taking for the moment is to simply draw a unit radius blue sphere, and then draw the continents over it; using GL_CULL_FACE to cull polygons with backwards winding was supposed to make this do the right thing.
An alternate approach is suggested by some of the "NeHe" tutorial/demo programs - create a texture out of the polygons, and then map it on to the sphere. This should make the rotation and other navigation stunningly fast, but departs rather a lot from the original program's concept...
With a relatively small amount of hacking (at a hackathon back on 6 June) - about a dozen lines of GL setup code and another dozen lines of data wrangling (the original dataset is a list of three-space points on a sphere, representing closed shapes; all points are positive; each shape is separated by a [-1,-1,-1] marker, and there's one zero-length segment... OpenGL appears to default to a view of a 2-unit cube centered on [0,0,0].)
Using OpenGL still involves knowing the use of matrix transforms on points in three space... but only so that you can figure out which of the underlying commands to use; actually setting up the transforms is straightforward commands.
Also, key learning (from glspec21.20061201.pdf): OpenGL is not about 3d modeling, just about drawing. So, polygon winding-rule culling is there, and lighting of polygons, and depth-buffering, but not intersection of polyhedra (polyhedra aren't mentioned at all in API docs, there are just polygons and lines...)
Back in the late 1980's, I found Multics PL/1 source code for a 3D globe program, with accompanying data. I ported it to C and Xlib, mostly because both languages had a common set of roots in Algol and I was able to keep some of the code unmodified across the port (ie. some of the PL/1 code was already valid C code.)
When http://www.google.com/codesearch came along, I did some egosurfing and stumbled across THVV's page http://www.multicians.org/thvv/globe.html where he picked the code up and ported it back to C++ and Taligent Pink, and then from there to Java, around 1997.
So, it's now ten years later, and it deserves another iteration. I'll be taking the opportunity to port it to Python this time, using the Python OpenGL bindings, mostly to get familiar with them. (I might also do a python-xlib port but that would be easier if I dug out my old C source and started with that directly, and I'd rather keep forward continuity...)