TAPs 0.7.7.3
TAPsMeshModel.cpp
Go to the documentation of this file.
00001 /******************************************************************************
00002 TAPsMeshModel.cpp
00003 
00004 A Base (Abstract) Mesh Model
00005 
00006 SUKITTI PUNAK   (11/02/2004)
00007 UPDATE          (11/07/2004)
00008 ******************************************************************************/
00009 #include "TAPsMeshModel.hpp"
00010 // Using Inclusion Model (i.e. definitions are included in declarations)
00011 //                       (this name.cpp is included in name.hpp)
00012 // Each friend is defined directly inside its declaration.
00013 
00014 BEGIN_NAMESPACE_TAPs__OpenGL
00015 //=============================================================================
00016 //-----------------------------------------------------------------------------
00017 // default constructor
00018 template <typename T>
00019 MeshModel<T>::MeshModel ()
00020     : OpenGLModel<T>(), 
00021       m_iNoVertices( 0 ), 
00022       m_iNoFaces( 0 ), 
00023       m_iNoTexCoords( 0 ) 
00024 {
00025     Init();
00026     #ifdef  TAPs_DEBUG_MODE
00027     std::cout << "MeshModel<" << typeid(T).name() << "> constructor\n";
00028     #endif//TAPs_DEBUG_MODE
00029 }
00030 //-----------------------------------------------------------------------------
00031 // destructor
00032 template <typename T>
00033 MeshModel<T>::~MeshModel ()
00034 {
00035     Init();
00036     #ifdef  TAPs_DEBUG_MODE
00037     std::cout << "MeshModel<" << typeid(T).name() << "> destructor\n";
00038     #endif//TAPs_DEBUG_MODE
00039 }
00040 //-----------------------------------------------------------------------------
00041 // Get/Set Fn(s)
00042 template <typename T>
00043 int  MeshModel<T>::GetNumVertices() const   { return m_iNoVertices; }
00044 template <typename T>
00045 int  MeshModel<T>::GetNumFaces() const      { return m_iNoFaces; }
00046 template <typename T>
00047 int  MeshModel<T>::GetNumTexCoords() const { return m_iNoTexCoords; }
00048 
00049 template <typename T>
00050 void MeshModel<T>::SetNumVertices( int n )  { m_iNoVertices = n; }
00051 template <typename T>
00052 void MeshModel<T>::SetNumFaces( int n ) { m_iNoFaces = n; }
00053 template <typename T>
00054 void MeshModel<T>::SetNumTexCoords( int n ){ m_iNoTexCoords = n; }
00055 
00056 
00057 #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00058 
00059     template <typename T>
00060     int MeshModel<T>::GetDimensionOfVertexColors () const
00061     { return static_cast<int>( m_ucDimOfVertexColor ); }
00062 
00063     template <typename T>
00064     int MeshModel<T>::GetNumVetexColors () const
00065     { return static_cast<int>( m_svVertexColors.size() / m_ucDimOfVertexColor ); }
00066 
00067     template <typename T>
00068     void MeshModel<T>::SetNumVetexColors ( int n, int dimension )
00069     {
00070         assert( 3 <= dimension && dimension <= 4 );
00071         assert( n >= 0 );
00072         m_uiVertexColorDimension = m_ucDimOfVertexColor = dimension;
00073         m_svVertexColors.resize( m_ucDimOfVertexColor * n );
00074     }
00075 
00076     //template <typename T>
00077     //template< typename T2 >
00078     //void MeshModel<T>::GetVertexColor ( int n, T2 vertexColor[] ) const
00079     //{
00080     //  n *= m_ucDimOfVertexColor;
00081     //  for ( unsigned char i = 0; i < m_ucDimOfVertexColor; ++i ) {
00082     //      vertexColor[i] = m_svVertexColors.at( n++ );
00083     //  }
00084     //}
00085 
00086     //template <typename T>
00087     //template< typename T2 >
00088     //void MeshModel<T>::SetVertexColor ( int n, T2 vertexColor[] )
00089     //{
00090     //  n *= m_ucDimOfVertexColor;
00091     //  for ( unsigned char i = 0; i < m_ucDimOfVertexColor; ++i ) {
00092     //      m_svVertexColors.at( n++ ) = vertexColor[i];
00093     //  }
00094     //}
00095 
00096     template <typename T>   template< typename T2 >
00097     void MeshModel<T>::GetVertexColor ( int n, T2 *r ) const
00098     {
00099         n *= m_ucDimOfVertexColor;
00100         *r = m_svVertexColors.at( n );
00101     }
00102     template <typename T>   template< typename T2 >
00103     void MeshModel<T>::GetVertexColor ( int n, T2 *r, T2 *g ) const
00104     {
00105         n *= m_ucDimOfVertexColor;
00106         *r = m_svVertexColors.at( n++ );
00107         *g = m_svVertexColors.at( n   );
00108     }
00109     template <typename T>   template< typename T2 >
00110     void MeshModel<T>::GetVertexColor ( int n, T2 *r, T2 *g, T2 *b ) const
00111     {
00112         n *= m_ucDimOfVertexColor;
00113         *r = m_svVertexColors.at( n++ );
00114         *g = m_svVertexColors.at( n++ );
00115         *b = m_svVertexColors.at( n   );
00116     }
00117     template <typename T>   template< typename T2 >
00118     void MeshModel<T>::GetVertexColor ( int n, T2 *r, T2 *g, T2 *b, T2 *a ) const
00119     {
00120         n *= m_ucDimOfVertexColor;
00121         *r = m_svVertexColors.at( n++ );
00122         *g = m_svVertexColors.at( n++ );
00123         *b = m_svVertexColors.at( n++ );
00124         *a = m_svVertexColors.at( n   );
00125     }
00126 
00127     template <typename T>   template< typename T2 >
00128     void MeshModel<T>::SetVertexColor ( int n, T2 *r )
00129     {
00130         n *= m_ucDimOfVertexColor;
00131         m_svVertexColors.at( n ) = *r;
00132     }
00133     template <typename T>   template< typename T2 >
00134     void MeshModel<T>::SetVertexColor ( int n, T2 *r, T2 *g )
00135     {
00136         n *= m_ucDimOfVertexColor;
00137         m_svVertexColors.at( n++ ) = *r;
00138         m_svVertexColors.at( n   ) = *g;
00139     }
00140     template <typename T>   template< typename T2 >
00141     void MeshModel<T>::SetVertexColor ( int n, T2 *r, T2 *g, T2 *b )
00142     {
00143         n *= m_ucDimOfVertexColor;
00144         m_svVertexColors.at( n++ ) = *r;
00145         m_svVertexColors.at( n++ ) = *g;
00146         m_svVertexColors.at( n   ) = *b;
00147     }
00148     template <typename T>   template< typename T2 >
00149     void MeshModel<T>::SetVertexColor ( int n, T2 *r, T2 *g, T2 *b, T2 *a )
00150     {
00151         n *= m_ucDimOfVertexColor;
00152         m_svVertexColors.at( n++ ) = *r;
00153         m_svVertexColors.at( n++ ) = *g;
00154         m_svVertexColors.at( n++ ) = *b;
00155         m_svVertexColors.at( n   ) = *a;
00156     }
00157 #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00158 
00159 
00160 #ifdef  TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00161 
00162     template <typename T>
00163     int MeshModel<T>::GetDimensionOfVertexTextures () const
00164     { return static_cast<int>( m_ucDimOfVertexTexture ); }
00165 
00166     template <typename T>
00167     int MeshModel<T>::GetNumVetexTextures () const
00168     { return static_cast<int>( m_svVertexTextures.size() / m_ucDimOfVertexTexture ); }
00169 
00170     template <typename T>
00171     void MeshModel<T>::SetNumVetexTextures ( int n, int dimension )
00172     {
00173         assert( 1 <= dimension && dimension <= 4 );
00174         assert( n >= 0 );
00175         m_uiVertexTextureDimension = m_ucDimOfVertexTexture = dimension;
00176         m_svVertexTextures.resize( m_ucDimOfVertexTexture * n );
00177     }
00178 
00179     //template <typename T>
00180     //template< typename T2 >
00181     //void MeshModel<T>::GetVertexTexture ( int n, T2 vertexTexture[] ) const
00182     //{
00183     //  n *= m_ucDimOfVertexTexture;
00184     //  for ( unsigned char i = 0; i < m_ucDimOfVertexTexture; ++i ) {
00185     //      vertexTexture[i] = m_svVertexTextures.at( n++ );
00186     //  }
00187     //}
00188 
00189     //template <typename T>
00190     //template< typename T2 >
00191     //void MeshModel<T>::SetVertexTexture ( int n, T2 vertexTexture[] )
00192     //{
00193     //  n *= m_ucDimOfVertexTexture;
00194     //  for ( unsigned char i = 0; i < m_ucDimOfVertexTexture; ++i ) {
00195     //      m_svVertexTextures.at( n++ ) = vertexTexture[i];
00196     //  }
00197     //}
00198 
00199     template <typename T>   template< typename T2 >
00200     void MeshModel<T>::GetVertexTexture ( int n, T2 *s ) const
00201     {
00202         n *= m_ucDimOfVertexTexture;
00203         *s = m_svVertexTextures.at( n );
00204     }
00205     template <typename T>   template< typename T2 >
00206     void MeshModel<T>::GetVertexTexture ( int n, T2 *s, T2 *t ) const
00207     {
00208         n *= m_ucDimOfVertexTexture;
00209         *s = m_svVertexTextures.at( n++ );
00210         *t = m_svVertexTextures.at( n   );
00211     }
00212     template <typename T>   template< typename T2 >
00213     void MeshModel<T>::GetVertexTexture ( int n, T2 *s, T2 *t, T2 *r ) const
00214     {
00215         n *= m_ucDimOfVertexTexture;
00216         *s = m_svVertexTextures.at( n++ );
00217         *t = m_svVertexTextures.at( n++ );
00218         *r = m_svVertexTextures.at( n   );
00219     }
00220     template <typename T>   template< typename T2 >
00221     void MeshModel<T>::GetVertexTexture ( int n, T2 *s, T2 *t, T2 *r, T2 *q ) const
00222     {
00223         n *= m_ucDimOfVertexTexture;
00224         *s = m_svVertexTextures.at( n++ );
00225         *t = m_svVertexTextures.at( n++ );
00226         *r = m_svVertexTextures.at( n++ );
00227         *q = m_svVertexTextures.at( n   );
00228     }
00229 
00230     template <typename T>   template< typename T2 >
00231     void MeshModel<T>::SetVertexTexture ( int n, T2 *s )
00232     {
00233         n *= m_ucDimOfVertexTexture;
00234         m_svVertexTextures.at( n ) = *s;
00235     }
00236     template <typename T>   template< typename T2 >
00237     void MeshModel<T>::SetVertexTexture ( int n, T2 *s, T2 *t )
00238     {
00239         n *= m_ucDimOfVertexTexture;
00240         m_svVertexTextures.at( n++ ) = *s;
00241         m_svVertexTextures.at( n   ) = *t;
00242     }
00243     template <typename T>   template< typename T2 >
00244     void MeshModel<T>::SetVertexTexture ( int n, T2 *s, T2 *t, T2 *r )
00245     {
00246         n *= m_ucDimOfVertexTexture;
00247         m_svVertexTextures.at( n++ ) = *s;
00248         m_svVertexTextures.at( n++ ) = *t;
00249         m_svVertexTextures.at( n   ) = *r;
00250     }
00251     template <typename T>   template< typename T2 >
00252     void MeshModel<T>::SetVertexTexture ( int n, T2 *s, T2 *t, T2 *r, T2 *q )
00253     {
00254         n *= m_ucDimOfVertexTexture;
00255         m_svVertexTextures.at( n++ ) = *s;
00256         m_svVertexTextures.at( n++ ) = *t;
00257         m_svVertexTextures.at( n++ ) = *r;
00258         m_svVertexTextures.at( n   ) = *q;
00259     }
00260 #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00261 
00262     
00263 //-----------------------------------------------------------------------------
00264 // Initialization fn
00265 template <typename T>
00266 void MeshModel<T>::Init()
00267 {
00268     #ifdef  TAPs_ENABLE_FACE_VERTEX_COLOR
00269         m_bEnableVertexColor = false;
00270         m_ucDimOfVertexColor = 3;
00271         m_uiVertexColorDimension = m_ucDimOfVertexColor;
00272     #endif//TAPs_ENABLE_FACE_VERTEX_COLOR
00273 
00274     #ifdef  TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00275         m_bEnableVertexTexture = false;
00276         m_ucDimOfVertexTexture = 1;
00277     #endif//TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES
00278 
00279     #if ( defined TAPs_ENABLE_FACE_VERTEX_TEXTURE_COORDINATES || defined TAPs_ENABLE_VERTEX_TEXTURE_COORDINATES )
00280     #endif
00281 }
00282 //-----------------------------------------------------------------------------
00283 //=============================================================================
00284 END_NAMESPACE_TAPs__OpenGL
00285 //-----------------------------------------------------------------------------
00286 //345678901234567890123456789012345678901234567890123456789012345678901234567890
00287 //--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines