diff options
Diffstat (limited to 'src/render/model.h')
-rw-r--r-- | src/render/model.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/src/render/model.h b/src/render/model.h new file mode 100644 index 0000000..ab6207e --- /dev/null +++ b/src/render/model.h @@ -0,0 +1,61 @@ +/* + render/model.h + This file is part of the Osirion project and is distributed under + the terms of the GNU General Public License version 2 +*/ + +#ifndef __INCLUDED_RENDER_MODEL_H__ +#define __INCLUDED_RENDER_MODEL_H__ + +#include <map> +#include <list> + +#include "render/face.h" +#include "math/plane3f.h" + +namespace render { + +/// a 3D model contains a list of faces +class Model +{ +public: + /// load a model from disk + Model(std::string const & name); + ~Model(); + + /// the name of the model + inline std::string const & name() const { return model_name; } + + void add_face(Face *face); + + /// the Model registry + static std::map<std::string, Model*> registry; + + /// draw the model + void draw(); + +/* ---- static functions for the Model registry -------------------- */ + + /// get name model, returns 0 if not found + static Model *find(std::string const & name); + + /// get named model from the registry and load it if necessary + static Model *get(std::string const & name); + + /// clear the Model registry + static void clear(); + +private: + void make_face(math::Plane3f *face, std::vector<math::Plane3f *> & planes); + + std::list<Face *> model_face; + std::string model_name; + + float model_scale; + +}; + +} + +#endif // __INCLUDED_RENDER_MODEL_H__ + |