#ifndef __MESHOBJECT_H_ #define __MESHOBJECT_H_ #include //#include "Vector.h" //#include "Graphics.h" class MeshMaterial { public: std::string material_name, texture_name; exh::color ambient, diffuse, specular; unsigned int shininess; float transparency; GLuint texture_id, material_id; MeshMaterial(void); ~MeshMaterial(void); }; class MeshFacePoint { public: exh::Vector* vertex; exh::uv_coord* tex_coord; MeshFacePoint(void); }; class MeshFaceTriangle { public: MeshMaterial* material; MeshFacePoint v1, v2, v3; exh::Vector* normal; MeshFaceTriangle(void); ~MeshFaceTriangle(void); }; class MeshSubObject { private: bool useTexCoord; public: GLuint vboVertexID, vboTexCoordID; unsigned int face_size, vertex_size, tex_coord_size; MeshFaceTriangle* faceTriangle; std::string name; exh::Vector pivot; exh::Vector* vertex; exh::uv_coord* tex_coord; MeshSubObject(void); ~MeshSubObject(void); bool hasTexCoord(void); void setFaceTriangleSize(unsigned int size); void setVertexSize(unsigned int size); void setTexCoordSize(unsigned int size); void buildSubObject(); }; class MeshObject { private: exh::Vector getNormal(const exh::Vector& v1, const exh::Vector& v2, const exh::Vector& v3); unsigned int getMaterialOrder(MeshMaterial *mat); unsigned int getVertexOrder(unsigned int obj, exh::Vector *vertex); unsigned int getTexCoordOrder(unsigned int obj, exh::uv_coord *tex_coord); public: unsigned int object_size, material_size; std::string name; MeshMaterial* material; MeshSubObject* object; MeshObject(void); ~MeshObject(void); void setObjectSize(unsigned int size); void setMaterialSize(unsigned int size); void buildObject(void); void calculateNormals(void); void calculateNormals(unsigned int object_num); void drawObject(unsigned int begin = 0, unsigned int end = 0); void drawSubObject(unsigned int object_num, unsigned int begin = 0, unsigned int end = 0); void readFile(const char *filename); void writeFile(const char *filename); }; #endif