![]() |
TAPs 0.7.7.3
|
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