nuclear@2: #ifndef MESH_H_ nuclear@2: #define MESH_H_ nuclear@2: nuclear@2: #include nuclear@7: #include nuclear@7: #include "vmath.h" nuclear@11: #include "material.h" nuclear@2: nuclear@2: enum { nuclear@2: MESH_ATTR_VERTEX, nuclear@2: MESH_ATTR_NORMAL, nuclear@2: MESH_ATTR_TANGENT, nuclear@2: MESH_ATTR_TEXCOORD, nuclear@2: nuclear@2: NUM_MESH_ATTR nuclear@2: }; nuclear@2: nuclear@2: nuclear@2: class Mesh { nuclear@2: private: nuclear@2: std::string name; nuclear@2: nuclear@2: unsigned int nverts, nfaces; nuclear@2: nuclear@2: unsigned int vbo[NUM_MESH_ATTR]; nuclear@2: unsigned int ibo; nuclear@2: nuclear@2: int tang_loc; nuclear@2: nuclear@11: Material mat; nuclear@7: Matrix4x4 xform; nuclear@7: nuclear@21: Vector3 bsph_center; nuclear@21: float bsph_rad; nuclear@21: bool bsph_valid; nuclear@21: nuclear@21: void calc_bsph(); nuclear@21: nuclear@2: public: nuclear@2: Mesh(); nuclear@2: ~Mesh(); nuclear@2: nuclear@7: void set_name(const char *name); nuclear@4: const char *get_name() const; nuclear@4: nuclear@2: bool create(const aiScene *scn, aiMesh *aim); nuclear@2: void destroy(); nuclear@2: nuclear@7: void set_xform(const Matrix4x4 &mat); nuclear@7: const Matrix4x4 &get_xform() const; nuclear@7: nuclear@11: void set_material(const Material &mat); nuclear@11: const Material &get_material() const; nuclear@11: nuclear@2: void set_attrib_location(int attr, int loc); nuclear@2: int get_attrib_location(int attr) const; nuclear@2: nuclear@2: void draw() const; nuclear@21: nuclear@21: const Vector3 &get_bsph_center() const; nuclear@21: float get_bsph_radius() const; nuclear@2: }; nuclear@2: nuclear@2: #endif // MESH_H_