include/obj_loader.hpp

Go to the documentation of this file.
00001 
00010 #ifndef __OBJ_LOADER_HPP_INCLUDE_GUARD__
00011 #define __OBJ_LOADER_HPP_INCLUDE_GUARD__
00012 
00013 #include <iostream>
00014 #include <fstream>
00015 #include <vector>
00016 #include "../gbLib/include/gbException.hpp"
00017 
00025 class OBJ_Mesh {
00026 public:
00029     struct Face {
00030         int vert1, vert2, vert3;            
00031         int normal1, normal2, normal3;      
00032         int texture1, texture2, texture3;   
00033         int smoothing_group;                
00034     };
00035 private:
00036     std::vector<double> m_geometry;         
00037     std::vector<double> m_normals;          
00038     std::vector<double> m_texcoords;        
00039     std::vector<Face>   m_faces;            
00040     char*               m_name;             
00041 public:
00046     OBJ_Mesh(char const* name);
00049     ~OBJ_Mesh();
00053     OBJ_Mesh(OBJ_Mesh const&);
00058     void SetName(char const* name);
00062     void SetGeometry(std::vector<double> const& data);
00067     template<typename T>
00068     void SetGeometry(T const* data, int n_data);
00073     template<typename T>
00074     void AddGeometry(T const* data, int n_data);
00078     void SetNormals(std::vector<double> const& data);
00083     template<typename T>
00084     void SetNormals(T const* data, int n_data);
00089     template<typename T>
00090     void AddNormals(T const* data, int n_data);
00094     void SetTextureData(std::vector<double> const& data);
00099     template<typename T>
00100     void SetTextureData(T const* data, int n_data);
00105     template<typename T>
00106     void AddTextureData(T const* data, int n_data);
00110     void SetFaceData(std::vector<Face> const& data);
00115     void SetFaceData(Face const* data, int n_data);
00120     void AddFaceData(Face const* data, int n_data);
00123     void ClearGeometry();
00126     void ClearNormals();
00129     void ClearTextureData();
00132     void ClearFaceData();
00136     char const* GetName() const;
00140     int GetNVertices() const;
00144     int GetNFaces() const;
00148     int GetNNormals() const;
00152     int GetNTexture() const;
00159     template<typename T>
00160     void GetMeshGeometryUnindexed(T* mesh_geometry, T* mesh_normals, T* mesh_texture, T scale) const;
00168     template<typename T>
00169     void GetMeshGeometry(T* mesh_geometry, T* mesh_normals, T* mesh_texture, Face* mesh_faces, T scale) const;
00174     double const* GetVertexX(int index) const;
00179     double const* GetVertexY(int index) const;
00184     double const* GetVertexZ(int index) const;
00189     double const* GetNormalX(int index) const;
00194     double const* GetNormalY(int index) const;
00199     double const* GetNormalZ(int index) const;
00204     double const* GetTextureX(int index) const;
00209     double const* GetTextureY(int index) const;
00214     double const* GetTextureZ(int index) const;
00219     Face const* GetFace(int index) const;
00220 private:
00221     OBJ_Mesh& operator=(OBJ_Mesh const&);           
00222 };
00223 
00224 #include "../src/obj_loader.impl.hpp"
00225 
00228 class OBJ_FileLoader {
00229 private:
00230     std::vector<OBJ_Mesh*> m_MeshList;              
00231 public:
00234     OBJ_FileLoader();
00239     OBJ_FileLoader(const char* fname);
00242     ~OBJ_FileLoader();
00246     int GetNMeshes() const;
00251     OBJ_Mesh const* GetMesh(int index) const;
00256     void AddMesh(OBJ_Mesh const& mesh);
00261     void WriteFile(char const* fname) const;
00262 private:
00268     void ReadFile(std::ifstream& f);
00269 };
00270 
00271 #endif

Generated on Sat Jan 19 18:58:21 2008 for PS2 IconSys Library by  doxygen 1.5.4