-/*] Copyright (c) 2009-2010, Charles McGarvey [**************************
+/*] Copyright (c) 2009-2011, Charles McGarvey [*****************************
**] All rights reserved.
*
-* vi:ts=4 sw=4 tw=75
-*
* Distributable under the terms and conditions of the 2-clause BSD license;
* see the file COPYING for a complete text of the license.
*
-**************************************************************************/
+*****************************************************************************/
#ifndef _MOOF_MESH_HH_
#define _MOOF_MESH_HH_
-/**
- * \file mesh.hh
- * Defines classes for loading and manipulating meshes.
- */
-
#include <iostream>
#include <map>
#include <vector>
#include <moof/resource.hh>
+/**
+ * \file mesh.hh
+ * Defines classes for loading and manipulating meshes.
+ */
+
namespace moof {
+// forward declarations
class script;
-
class mesh : public boost::noncopyable, public entity
{
public:
void draw(scalar alpha = SCALAR(0.0)) const;
-
struct material
{
material(const std::string& id) :
name(id) {}
-
+ scalar shininess;
std::string name;
-
- vector4 diffuse;
vector4 ambient;
+ vector4 diffuse;
vector4 emissive;
vector4 specular;
- scalar shininess;
};
-
void set_material(int index) const;
void set_material(const material& material) const;
std::vector<vector2> triangles_uv;
};
-
class object;
typedef boost::shared_ptr<object> object_ptr;
typedef boost::weak_ptr<object> object_weakptr;
return object_ptr(new object(m));
}
- void draw(scalar alpha = SCALAR(0.0), bool recurse = true) const;
-
+ void
+ draw(scalar alpha = SCALAR(0.0), bool recurse = true) const;
- const moof::mesh& mesh;
+ const moof::mesh& mesh;
- std::string name;
- std::string data;
- std::string url;
+ std::string name;
+ std::string data;
+ std::string url;
- image_handle texture;
- vector2 texrep;
+ image_handle texture;
+ vector2 texrep;
- std::vector<vector3> verts;
- std::vector<material_group> faces;
+ std::vector<vector3> verts;
+ std::vector<material_group> faces;
- std::vector<object_ptr> kids;
- std::map<std::string,object_ptr> kids_byname;
- object_weakptr parent;
+ std::vector<object_ptr> kids;
+ std::map<std::string,object_ptr> kids_byname;
+ object_weakptr parent;
};
-
object_ptr operator [] (unsigned index) const
{
return objects_[index];
}
-
/**
* Import script bindings for the mesh class.
* \param The script.
*/
static void import(script& script, const std::string& nspace = "");
-
private:
- void import(std::istream& stream);
+ void load(std::istream& stream);
+
+ void load_material(std::istream& stream);
+ object_ptr load_object(std::istream& stream, object_ptr parent);
+ void load_surface(std::istream& stream, object_ptr obj);
std::vector<material> materials_;
std::vector<object_ptr> objects_;