/*] Copyright (c) 2009-2010, 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 #include #include #include #include #include #include namespace moof { class mesh : public boost::noncopyable, public drawable { public: explicit mesh(const std::string& path); void draw(scalar alpha = SCALAR(0.0)) const; struct material { material(const std::string& id) : name(id) {} std::string name; vector4 diffuse; vector3 ambient; vector3 emissive; vector3 specular; scalar shininess; }; void set_material(int index) const; void set_material(const material& material) const; struct material_group : public drawable { material_group() {} void draw(scalar alpha = SCALAR(0.0)) const; std::vector triangles; std::vector triangles_uv; }; class object; typedef boost::shared_ptr object_ptr; struct object { object() : texrep(SCALAR(1.0), SCALAR(1.0)) {} static object_ptr alloc() { return object_ptr(new object); } void draw(const mesh& mesh, scalar alpha = SCALAR(0.0)) const; std::string name; std::string data; std::string url; image_handle texture; vector2 texrep; std::vector verts; std::vector faces; std::vector kids; object_ptr parent; }; private: void import(std::istream& stream); std::vector materials_; std::vector objects_; }; typedef resource_handle mesh_handle; } // namespace moof #endif // _MOOF_MESH_HH_