Still ugly, but better than before
The idea is to push the "platform specific" stuff out as far as possible, so that we can worry about algorithms at a higher level. The above diagram doesn't necessarily do this properly (I envision a large number of revisions to this diagram over time), but it's at least a step in the right direction.
I've worked a bit on the application side over the past month or so, but a lot of my efforts have been on the scene graph side. This scene graph isn't really anything fancy - it's more of a glorified tree structure than anything else - but it'll help with organizing my scene in the long run, I think. Below is an incomplete class diagram of what I've got so far:
Scene graph goodness
This misses some things that are pretty important for drawable objects (like the material library, which is a static std::vector of materials owned by GraphicsObject), but gets the general point across. I've got the basic structure implemented already - the problem I am fighting now is trying to see why doing so killed my textures and display lists.
So, list of tasks for the time being:
1 - Fix texturing
2 - Eliminate all references to display lists (kind of done already)
3 - Implement vertex buffers/face buffers/tex buffers/normal buffers
4 - ensure objects are rendered as triangles
5 - Add simple radius-based collision detection
6 - Add dynamic LOD through use of multiple models
7 - Add support for collision model (simplified to collide quickly, and implemented with flexibility in mind. This may warrant its own inheritance diagram by the time I'm done)
8 - Add a model for shadow casting (simplified to draw quickly, currently using only planar projection shadows)
9 - Add support for multitexturing
10 - Revamp the object loader a bit so that it supports additional maps and shaders (far in the future).
11 - Add better shadow casting methods (Shadow maps?)