Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/model.h')
-rw-r--r--src/render/model.h61
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__
+