This is my little try at writing a Doom3 viewer. It’s written in C++ using OpenGL and SDL.

Right now I only read the .proc and .mtr files. In the .proc file, I have figured out how the model (geometry), nodes (BSP) and interAreaPortals (portals) work. The culling works really nice now. Now I just have to figure out how the shadowModel works as well, among other things. The material files are a bit more complex than the Quake3 files, but in time I’ll figure it out.

Current features:

  • Render the levels (with diffuse-map & decals only)
  • Uses the Doom3 Portals/BSP system.
  • Parse the material files, and have most of it working, and switching to using boost::spirit made it really fast and elegant.
  • Parse the .map-file, to some degree ;].
  • And that’s kindof it right now.

Things TODO:

  • Do all the fancy per-pixel-lightning. :)
  • Shadows.
  • Everything else. ^_^

Screenshots from 2006.07.25 (Alpha Labs 3) Sorted by light. Hardware per-vertex lighting. I should just try and use the vertex/fragment-programs, but I need to make ALOT of optimizations for it to run at an acceptable speed on my old computer, so it might never happend. Ah well.

Screenshots from 2004.10.02 (Alpha Labs 3) Now portals work as they should. Perfect Doom3 culling. Materials work much better now. I now read in start-position and lights from the .map-file, and the next thing should be to use the lights. Colorful stuff in the first pic is lights and portals, rendered for debug purposes.

Screenshots from 2004.09.07 (Alpha Labs 3) Added frustum culling, some portal stuff, decals, alphatests and blending.

Screenshots from 2004.09.01 (Alpha Labs 3) …well, you can kindof see that it’s Doom3, if you have played this level that is.