![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsReadObj.hpp 00003 00004 Create an OpenGL Model Object from a .obj file. 00005 00006 SUKITTI PUNAK (10/12/2006) 00007 UPDATE (10/15/2006) 00008 ******************************************************************************/ 00039 #ifndef TAPs_READ_OBJ_HPP 00040 #define TAPs_READ_OBJ_HPP 00041 00042 // The necessary headers are included in TAPsReadModel.hpp which directly uses 00043 // this header. 00044 #include "Support/TAPsHelpCreateHalfEdgeModel.hpp" 00045 00046 BEGIN_NAMESPACE_TAPs 00047 //============================================================================= 00048 template <typename T> class ReadModels; 00049 //============================================================================= 00050 template <typename T> 00051 class ReadObj { 00052 friend class ReadModels<T>; 00053 // Member Functions ---------------------------------------------------------- 00054 public: 00055 //------------------------------------------------------------------------- 00056 // Read an input file 00057 // I/P: fileName 00058 // O/P: *prModel 00059 // More than one fn per each operation due to the design of Model types; 00060 // E.g. 00061 // One for PolygonalModel and its derived classes 00062 // One for XPolygonalModel and its derived classes 00063 // One for HalfEdgeModel and its derived classes 00064 // 00065 // Each pairs are exactly identical (both declaration and definition) 00066 // except the passed prModel pointer. 00067 //------------------------------------------------------------------------- 00068 static bool ReadFile ( const char * fileName, 00069 OpenGL::PolygonalModel<T> * const prModel ); 00070 static bool ReadFile ( const char * fileName, 00071 OpenGL::XPolygonalModel<T> * const prModel ); 00072 static bool ReadFile ( const char * fileName, 00073 OpenGL::HalfEdgeModel<T> * const prModel ); 00074 //------------------------------------------------------------------------- 00075 private: 00076 //------------------------------------------------------------------------- 00082 static bool ReadDataFile ( const char * fileName, 00083 OpenGL::MeshModel<T> * const prModel ); 00084 static void SetModelProperties ( OpenGL::MeshModel<T> * const prModel ); 00085 static void SetupModel ( OpenGL::PolygonalModel<T> * const prModel ); 00086 static void SetupModel ( OpenGL::XPolygonalModel<T> * const prModel ); 00087 static void SetupModel ( OpenGL::HalfEdgeModel<T> * const prModel ); 00088 //------------------------------------------------------------------------- 00089 // Process Each Line Statement 00090 //------------------------------------------------------------------------- 00096 static void ProcessLineObjectName_o ( 00097 char * line, OpenGL::MeshModel<T> * const prModel ); 00098 //------------------------------------------------------------------------- 00109 static void ProcessLineGroupName_g ( 00110 char * line, OpenGL::MeshModel<T> * const prModel ); 00111 //------------------------------------------------------------------------- 00120 static void ProcessLineMaterialLibrary_mtllib ( 00121 char * line, OpenGL::MeshModel<T> * const prModel ); 00122 //------------------------------------------------------------------------- 00132 static void ProcessLineUseMaterialName_usemtl ( 00133 char * line, OpenGL::MeshModel<T> * const prModel ); 00134 //------------------------------------------------------------------------- 00142 static void ProcessLineVertexPosition_v ( 00143 char * line, OpenGL::MeshModel<T> * const prModel ); 00144 //------------------------------------------------------------------------- 00152 static void ProcessLineVertexTextureCoordinates_vt ( 00153 char * line, OpenGL::MeshModel<T> * const prModel ); 00154 //------------------------------------------------------------------------- 00160 static void ProcessLineVertexNormal_vn ( 00161 char * line, OpenGL::MeshModel<T> * const prModel ); 00162 //------------------------------------------------------------------------- 00185 static void ProcessLineFace_f ( 00186 char * line, OpenGL::MeshModel<T> * const prModel ); 00187 //------------------------------------------------------------------------- 00188 // Data Members --------------------------------------------------------------- 00189 private: 00190 //--------------------------------------------------------------- 00191 static FILE * fileIn; 00192 static int faceNo; // current face number 00193 static int vertexPositionNo; // current vertex position number 00194 static int vertexTextureCoordNo; // current vertex texture coordinates number 00195 static int vertexNormalNo; // current vertex normal number 00196 static MeshData<T> meshData; // mesh data 00197 }; 00198 //============================================================================= 00199 END_NAMESPACE_TAPs 00200 //----------------------------------------------------------------------------- 00201 // Include definition if TAPs_USE_EXPORT is not defined 00202 //#if !defined( TAPs_USE_EXPORT ) 00203 #include "TAPsReadObj.cpp" 00204 //#endif 00205 //----------------------------------------------------------------------------- 00206 #endif 00207 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00208 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----