![]() |
TAPs 0.7.7.3
|
00001 /****************************************************************************** 00002 TAPsRead3dsMaxASE.hpp 00003 00004 Create an OpenGL Polygonal Model Object from a 3ds Max .ASE file 00005 00006 SUKITTI PUNAK (04/28/2005) 00007 ******************************************************************************/ 00008 #ifndef TAPs_READ_3DSMAX_ASE_HPP 00009 #define TAPs_READ_3DSMAX_ASE_HPP 00010 00011 // The necessary headers are included in TAPsReadModel.hpp which directly uses 00012 // this header. 00013 #include "Support/TAPsHelpCreateHalfEdgeModel.hpp" 00014 00015 BEGIN_NAMESPACE_TAPs 00016 //============================================================================= 00017 template <typename T> class ReadModels; 00018 //============================================================================= 00019 template <typename T> 00020 class Read3dsMaxASE { 00021 friend class ReadModels<T>; 00022 // Member Functions ---------------------------------------------------------- 00023 public: 00024 //------------------------------------------------------------------------- 00025 // Read an input file 00026 // I/P: fileName 00027 // O/P: *prModel 00028 // Two fns per each operation due to the design of Model types; 00029 // One for PolygonalModel and its derived classes 00030 // The other for XPolygonalModel and its derived classes 00031 // 00032 // Each pairs are exactly identical (both declaration and definition) 00033 // except the passed prModel pointer. 00034 //------------------------------------------------------------------------- 00035 static bool readFile( const char *fileName, OpenGL::PolygonalModel<T> * const prModel ); 00036 static bool readFile( const char *fileName, OpenGL::XPolygonalModel<T> * const prModel ); 00037 static bool readFile( const char *fileName, OpenGL::HalfEdgeModel<T> * const prModel ); 00038 static bool readFile( const char *fileName, OpenGL::MultiMeshModel<T> * const prModel, TAPs::Enum::ModelType eModelType ); 00039 //------------------ 00040 #if defined(__gl_h_) || defined(__GL_H__) 00041 static bool readFile( const char *fileName, std::vector< OpenGL::OpenGLHETriMeshOneModelMultiParts<T> * > & modelList ); 00042 #endif 00043 //------------------------------------------------------------------------- 00044 private: 00045 //------------------------------------------------------------------------- 00046 // Process Each Node 00047 //------------------------------------------------------------------------- 00048 static void ProcessNodeMATERIAL_LIST( char *line ); 00049 static void ProcessNodeMATERIAL( char *line, bool isSubmaterialNode = false ); 00050 static void ProcessNodeMAP_( char *line ); 00051 //------------------------------------------------------------------------- 00052 static void ProcessNodeMATERIAL_LIST( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00053 static void ProcessNodeMATERIAL_LIST( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00054 static void ProcessNodeMATERIAL_LIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00055 //------------------------------------------------------------------------- 00056 static void ProcessNodeMATERIAL( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00057 static void ProcessNodeMATERIAL( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00058 static void ProcessNodeMATERIAL( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00059 //------------------------------------------------------------------------- 00060 static void ProcessNodeGEOMOBJECT( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00061 static void ProcessNodeGEOMOBJECT( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00062 static void ProcessNodeGEOMOBJECT( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00063 //------------------------------------------------------------------------- 00064 static void ProcessNodeNODE_TM( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00065 static void ProcessNodeNODE_TM( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00066 static void ProcessNodeNODE_TM( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00067 //------------------------------------------------------------------------- 00068 static void ProcessNodeMESH( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00069 static void ProcessNodeMESH( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00070 static void ProcessNodeMESH( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00071 //------------------------------------------------------------------------- 00072 static void ProcessNodeMESH_VERTEX_LIST( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00073 static void ProcessNodeMESH_VERTEX_LIST( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00074 static void ProcessNodeMESH_VERTEX_LIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00075 //------------------------------------------------------------------------- 00076 static void ProcessNodeMESH_FACE_LIST( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00077 static void ProcessNodeMESH_FACE_LIST( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00078 static void ProcessNodeMESH_FACE_LIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00079 //------------------------------------------------------------------------- 00080 00081 // OBSOLETE CODE -- WILL BE REMOVED!!! 00082 #if (!defined TAPs_SUPPORT_ASE_FORMAT || (defined TAPs_SUPPORT_ASE_FORMAT && !defined TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES)) 00083 static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::PolygonalModel<T> * const prModel, T * UVW ); 00084 static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::XPolygonalModel<T> * const prModel, T * UVW ); 00085 static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel, T * UVW ); 00086 //------------------------------------------------------------------------- 00087 static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::PolygonalModel<T> * const prModel, T * UVW ); 00088 static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::XPolygonalModel<T> * const prModel, T * UVW ); 00089 static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel, T * UVW ); 00090 #endif 00091 00092 //------------------------------------------------------------------------- 00093 static void ProcessNodeMESH_NORMALS( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00094 static void ProcessNodeMESH_NORMALS( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00095 static void ProcessNodeMESH_NORMALS( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00096 //------------------------------------------------------------------------- 00097 static void ProcessNodeMETERIAL_REF( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00098 static void ProcessNodeMETERIAL_REF( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00099 static void ProcessNodeMETERIAL_REF( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00100 //------------------------------------------------------------------------- 00101 00102 #ifdef TAPs_SUPPORT_ASE_FORMAT 00103 #ifdef TAPs_ENABLE_FACE_VERTEX_COLOR 00104 static void ProcessNodeMESH_NUMCVERTEX( char *line ); 00105 static void ProcessNodeMESH_CVERTLIST( char *line, OpenGL::MeshModel<T> * const prModel ); 00106 static void ProcessNodeMESH_NUMCVFACES( char *line ); 00107 static void ProcessNodeMESH_CFACELIST( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00108 static void ProcessNodeMESH_CFACELIST( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00109 static void ProcessNodeMESH_CFACELIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00110 static int m_iNumVertexColors; 00111 static int m_iNumFaceVertexColors; 00112 #endif//TAPs_ENABLE_FACE_VERTEX_COLOR 00113 00114 #ifdef TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES 00115 static void ProcessNodeMESH_NUMTVERTEX( char *line ); 00116 static void ProcessNodeMESH_TVERTLIST( char *line, OpenGL::MeshModel<T> * const prModel ); 00117 static void ProcessNodeMESH_NUMTVFACES( char *line ); 00118 static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::PolygonalModel<T> * const prModel ); 00119 static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::XPolygonalModel<T> * const prModel ); 00120 static void ProcessNodeMESH_TFACELIST( char *line, OpenGL::HalfEdgeModel<T> * const prModel ); 00121 static int m_iNumVertexTextures; 00122 static int m_iNumFaceVertexTextures; 00123 #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES 00124 #endif//TAPs_SUPPORT_ASE_FORMAT 00125 00126 //------------------------------------------------------------------------- 00127 // Data Members --------------------------------------------------------------- 00128 private: 00129 static int vertexNo; 00130 static int faceNo; 00131 static int halfEdgeCounter; 00132 static FILE *fileIn; 00133 //------------------------------------------------------------------------- 00139 // mat set // main mat (0) + sub mats (0+i) 00140 static std::vector< std::vector< OpenGL::Material * > > materialList; 00141 static std::vector< OpenGL::Material * > materials; 00142 static void ClearMaterialList (); 00143 static void ClearMaterials (); 00144 static void SetMaterial ( int id, OpenGL::OpenGLModel<T> * prModel ); 00145 //------------------------------------------------------------------------- 00146 }; 00147 //============================================================================= 00148 END_NAMESPACE_TAPs 00149 //----------------------------------------------------------------------------- 00150 // Include definition if TAPs_USE_EXPORT is not defined 00151 //#if !defined( TAPs_USE_EXPORT ) 00152 #include "TAPsRead3dsMaxASE.cpp" 00153 //#endif 00154 //----------------------------------------------------------------------------- 00155 #endif 00156 //34567890123456789012345678901234567890123456789012345678901234567890123456789 00157 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----