MiME
Last updated on June 25, 2007 - 0:10
Mike's Mini Engine (MiME) is a C++/OpenGL shader based 3D graphics/game engine that I have been working on for a couple of years now. Development on the engine has been relative slow up until now due to a number of factors (final year at university and the development of my website amongst other things). Recently I've been able to put a bit more time into the engine and its actually started to become something a bit more decent. The aim is to continue development on the engine and hopefully release a game built using it.
While designing/developing the engine I have been trying to keep a couple of key factors in mind:
Good software engineering practices - the engine should be modular with each component/subsystem performing a single task with no or minimal knowledge of other systems. It should also be extensible and easily reusable.
API/platform independence - design should be done such that the engine can be ported to different APIs and platforms with a minimal amount of additional effort.
Ease of use - the engine should be straightforward to use.
I believe that I have managed to stick with these principles pretty well so far. I will admit that I don't really have much knowledge of developing for other OSes/APIs but I have been trying to keep all the OS/API specific content contained to a few key classes along with defining a common interface which can be used internally. Well enough about the design of the engine, the following is a list of what the engine currently can do:
The following is a list of things that I am planning on implementing in the near future:
While designing/developing the engine I have been trying to keep a couple of key factors in mind:
Good software engineering practices - the engine should be modular with each component/subsystem performing a single task with no or minimal knowledge of other systems. It should also be extensible and easily reusable.
API/platform independence - design should be done such that the engine can be ported to different APIs and platforms with a minimal amount of additional effort.
Ease of use - the engine should be straightforward to use.
I believe that I have managed to stick with these principles pretty well so far. I will admit that I don't really have much knowledge of developing for other OSes/APIs but I have been trying to keep all the OS/API specific content contained to a few key classes along with defining a common interface which can be used internally. Well enough about the design of the engine, the following is a list of what the engine currently can do:
- Light window wrapping
- Pluggable sub-systems (render, input and sound) using dynamic link libraries
- Input handling through DirectX8 or Windows
- Rendering done through OpenGL and GLSL
- Scene management through use of scenegraph
- Full GLSL shader support
- Dynamic lighting
- Various types of texturing (1D, 2D, 3D, cube maps and render to texture)
- Vertex Buffer Object (VBO) support
- Texture and shader creation/loading managers
- Internal model format to handle custom material information (both loading and saving to binary or ascii)
- Bitmap fonts (including text alignment, wrapping and kerning)
- Screenshot system
- Internal memory management to facilitate finding memory leaks
- XML system/error logging
- Common math library
- Common data structures library
The following is a list of things that I am planning on implementing in the near future:
- Frustum culling
- Scene loading through XML "scene" files
- Billboard support
- Model LOD support
- Particle engine
- Lightweight pluggable GUI system
- COLLADA model support (I love this model format!)
- Shadow mapping (projected textures)



