A model viewer for Quake 1 and Hexen 2 with a focus on accurate representation.
Powered by raylib and dear imgui!
- Support for Quake 1 (IDPO) and Hexen 2 (RAPO) model formats
- Hardware-accelerated with OpenGL, while still maintaining the software renderer look
- Vertices are transformed and animated all on the GPU via a vertex shader
- Supports previewing animations with interpolation
- Linux doesn't have a File Select Dialog yet. The model needs to be loaded via a launch argument (like
LunarViewer ~/id1/progs/shambler.mdl). I'm planning on implementing one using ImGui that wouldn't require platform specific implementations and it would allow me to add model previews within that.
- Sometimes when switching the render mode, the model's texture will get unloaded. Switching the render mode again a few times will fix it.
- Models with animated textures (groupskins) are not supported yet
- Models with groupframes are not supported yet
- You can't change the skin that's being previewed
- No config of any kind is saved (apart from imgui)
- There's a slight offset on the UVs that I need to look into
- The code is an absolute mess that needs to be cleaned up
premake-2019.bat to create a Visual Studio 2019 solution!
premake-linux.sh to create the Makefiles and then run
make to build! (You can do
make config=release_x64 to make a release build)
Helpful resources used in the making of this project
Loading Quake 1 MDL files - http://tfc.duke.free.fr/coding/mdl-specs-en.html
- Quake Mapping Discord (specifically Spoike and Paril) - help with the RAPO model format and flags
- MissLav - testing on Linux with Wine
- Joshua Barrett - help with getting the application working on Linux
Used open source projects and libraries
Used as the rendering backend. The app also uses normal OpenGL code to do stuff that raylib itself doesn't expose.
The code was modified to fix the normal matrix (it was in view space and not world space) and to allow for the use of the stencil buffer.
Used for the main UI
raylib backend for ImGui
Not used for anything yet, but the goal is to use it to read files from PAKs and other archive formats it supports
Used for preprocessing the shader files