Changeset 3953 in orxonox.OLD for orxonox/branches/physics/src/lib/graphics/importer/objModel.cc
- Timestamp:
- Apr 25, 2005, 9:29:41 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
orxonox/branches/physics/src/lib/graphics/importer/objModel.cc
r3658 r3953 18 18 #include "objModel.h" 19 19 20 #include <fstream> 20 #include <stdio.h> 21 #include <string.h> 22 #include <stdlib.h> 23 24 #define PARSELINELENGTH 8192 21 25 22 26 #include "debug.h" 27 #include "compiler.h" 23 28 24 29 /** … … 27 32 \param scaling The factor that the model will be scaled with. 28 33 */ 29 OBJModel::OBJModel(c har* fileName, float scaling)34 OBJModel::OBJModel(const char* fileName, float scaling) : Model(fileName) 30 35 { 31 36 this->initializeOBJ(); … … 34 39 this->importFile (fileName); 35 40 36 this->importToGL (); 37 38 this->cleanup(); 41 this->finalize(); 39 42 } 40 43 … … 63 66 this->objFileName = NULL; 64 67 this->mtlFileName = NULL; 65 66 this->initialize();67 68 } 68 69 … … 71 72 \param fileName The file to import 72 73 */ 73 bool OBJModel::importFile (c har* fileName)74 bool OBJModel::importFile (const char* fileName) 74 75 { 75 76 PRINTF(4)("preparing to read in file: %s\n", fileName); … … 83 84 char pathSplitter='/'; 84 85 #endif /* __WIN32__ */ 85 char* tmpName = fileName; 86 char* tmpName; 87 strcpy(tmpName, fileName); 86 88 if (tmpName[0] == pathSplitter) 87 89 tmpName++; … … 100 102 101 103 this->setName(name); 102 if (this->material) 103 this->material->addTexturePath(this->objPath); 104 104 105 this->objFileName = new char[strlen(name)+1]; 105 106 strcpy (this->objFileName, name); … … 120 121 strcat(fileName, this->objFileName); 121 122 122 ifstream* OBJ_FILE = new ifstream(fileName); 123 if (OBJ_FILE->fail()) 124 { 125 PRINTF(1)("unable to open .OBJ file: %s\n Loading cube-Model instead.\n", fileName); 126 cubeModel(); 127 OBJ_FILE->close(); 128 delete []fileName; 129 delete OBJ_FILE; 123 FILE* stream; 124 if( (stream = fopen (fileName, "r")) == NULL) 125 { 126 printf("IniParser could not open %s\n", fileName); 130 127 return false; 131 128 } 132 PRINTF(4)("Reading from opened file %s\n", fileName); 133 char Buffer[10000]; 134 while(!OBJ_FILE->eof()) 135 { 136 OBJ_FILE->getline(Buffer, 10000); 137 PRINTF(5)("Read input line: %s\n", Buffer); 129 130 char buffer[PARSELINELENGTH]; 131 while(fgets(buffer, PARSELINELENGTH, stream)) 132 { 133 // line termiated with \0 not \n 134 if (buffer[strlen(buffer)-1] == '\n') 135 buffer[strlen(buffer)-1] = '\0'; 136 137 // case vertice 138 if (!strncmp(buffer, "v ", 2)) 139 { 140 this->addVertex(buffer+2); 141 } 142 143 // case face 144 else if (!strncmp(buffer, "f ", 2)) 145 { 146 this->addFace (buffer+2); 147 } 138 148 139 140 // case vertice 141 if (!strncmp(Buffer, "v ", 2)) 142 { 143 this->addVertex(Buffer+2); 144 } 145 146 // case face 147 else if (!strncmp(Buffer, "f ", 2)) 148 { 149 this->addFace (Buffer+2); 150 } 151 152 else if (!strncmp(Buffer, "mtllib ", 7)) 153 { 154 this->readMtlLib (Buffer+7); 155 } 156 157 else if (!strncmp(Buffer, "usemtl ", 7)) 158 { 159 this->addUseMtl (Buffer+7); 149 else if (!strncmp(buffer, "mtllib ", 7)) 150 { 151 this->readMtlLib (buffer+7); 152 } 153 154 else if (!strncmp(buffer, "usemtl ", 7)) 155 { 156 this->setMaterial (buffer+7); 160 157 } 161 158 162 159 // case VertexNormal 163 else if (!strncmp( Buffer, "vn ", 3))164 { 165 this->addVertexNormal( Buffer+3);160 else if (!strncmp(buffer, "vn ", 3)) 161 { 162 this->addVertexNormal(buffer+3); 166 163 } 167 164 168 165 // case VertexTextureCoordinate 169 else if (!strncmp( Buffer, "vt ", 3))170 { 171 this->addVertexTexture( Buffer+3);166 else if (!strncmp(buffer, "vt ", 3)) 167 { 168 this->addVertexTexture(buffer+3); 172 169 } 173 170 // case group 174 else if (!strncmp(Buffer, "g ", 2)) 175 { 176 this->addGroup (Buffer+2); 177 } 178 else if (!strncmp(Buffer, "s ", 2)) //! \todo smoothing groups have to be implemented 179 { 180 PRINTF(2)("smoothing groups not supportet yet. line: %s\n", Buffer); 181 } 182 } 183 OBJ_FILE->close(); 184 delete OBJ_FILE; 171 else if (!strncmp(buffer, "g ", 2)) 172 { 173 this->addGroup (buffer+2); 174 } 175 else if (!strncmp(buffer, "s ", 2)) //! \todo smoothing groups have to be implemented 176 { 177 PRINTF(2)("smoothing groups not supportet yet. line: %s\n", buffer); 178 } 179 } 180 fclose (stream); 185 181 delete []fileName; 186 182 return true; … … 196 192 197 193 */ 198 bool OBJModel::readMtlLib (c har* mtlFile)194 bool OBJModel::readMtlLib (const char* mtlFile) 199 195 { 200 196 this->mtlFileName = new char [strlen(mtlFile)+1]; … … 205 201 206 202 207 PRINTF(4)("Opening mtlFile: %s\n", fileName); 208 209 ifstream* MTL_FILE = new ifstream (fileName); 210 if (MTL_FILE->fail()) 211 { 212 PRINTF(2)("unable to open file: %s\n", fileName); 213 MTL_FILE->close(); 214 delete []fileName; 215 delete MTL_FILE; 203 FILE* stream; 204 if( (stream = fopen (fileName, "r")) == NULL) 205 { 206 printf("IniParser could not open %s\n", fileName); 216 207 return false; 217 208 } 218 char Buffer[500]; 219 Material* tmpMat = material; 220 while(!MTL_FILE->eof()) 221 { 222 MTL_FILE->getline(Buffer, 500); 223 PRINTF(5)("found line in mtlFile: %s\n", Buffer); 209 210 char buffer[PARSELINELENGTH]; 211 Material* tmpMat = NULL; 212 213 while(fgets(buffer, PARSELINELENGTH, stream)) 214 { 215 PRINTF(5)("found line in mtlFile: %s\n", buffer); 216 217 // line termiated with \0 not \n 218 if (buffer[strlen(buffer)-1] == '\n') 219 buffer[strlen(buffer)-1] = '\0'; 220 221 // create new Material 222 if (!strncmp(buffer, "newmtl ", 7)) 223 { 224 tmpMat = this->addMaterial(buffer+7);//tmpMat->addMaterial(buffer+7); 225 } 226 // setting a illumMode 227 else if (!strncmp(buffer, "illum ", 6)) 228 { 229 if (likely(tmpMat != NULL)) 230 tmpMat->setIllum(buffer+6); 231 232 } 233 // setting Diffuse Color 234 else if (!strncmp(buffer, "Kd ", 3)) 235 { 236 if (likely(tmpMat != NULL)) 237 tmpMat->setDiffuse(buffer+3); 238 } 239 // setting Ambient Color 240 else if (!strncmp(buffer, "Ka ", 3)) 241 { 242 if (likely(tmpMat != NULL)) 243 tmpMat->setAmbient(buffer+3); 244 } 245 // setting Specular Color 246 else if (!strncmp(buffer, "Ks ", 3)) 247 { 248 if (likely(tmpMat != NULL)) 249 tmpMat->setSpecular(buffer+3); 250 } 251 // setting The Specular Shininess 252 else if (!strncmp(buffer, "Ns ", 3)) 253 { 254 if (likely(tmpMat != NULL)) 255 tmpMat->setShininess(buffer+3); 256 } 257 // setting up transparency 258 else if (!strncmp(buffer, "d ", 2)) 259 { 260 if (likely(tmpMat != NULL)) 261 tmpMat->setTransparency(buffer+2); 262 } 263 else if (!strncmp(buffer, "Tf ", 3)) 264 { 265 if (likely(tmpMat != NULL)) 266 tmpMat->setTransparency(buffer+3); 267 } 224 268 225 226 // create new Material 227 if (!strncmp(Buffer, "newmtl ", 7)) 228 { 229 tmpMat = tmpMat->addMaterial(Buffer+7); 230 // PRINTF(2)("%s, %p\n", tmpMat->getName(), tmpMat); 231 } 232 // setting a illumMode 233 else if (!strncmp(Buffer, "illum ", 6)) 234 { 235 tmpMat->setIllum(Buffer+6); 236 237 } 238 // setting Diffuse Color 239 else if (!strncmp(Buffer, "Kd ", 3)) 240 { 241 tmpMat->setDiffuse(Buffer+3); 242 } 243 // setting Ambient Color 244 else if (!strncmp(Buffer, "Ka ", 3)) 245 { 246 tmpMat->setAmbient(Buffer+3); 247 } 248 // setting Specular Color 249 else if (!strncmp(Buffer, "Ks ", 3)) 250 { 251 tmpMat->setSpecular(Buffer+3); 252 } 253 // setting The Specular Shininess 254 else if (!strncmp(Buffer, "Ns ", 3)) 255 { 256 tmpMat->setShininess(Buffer+3); 257 } 258 // setting up transparency 259 else if (!strncmp(Buffer, "d ", 2)) 260 { 261 tmpMat->setTransparency(Buffer+2); 262 } 263 else if (!strncmp(Buffer, "Tf ", 3)) 264 { 265 tmpMat->setTransparency(Buffer+3); 266 } 267 268 else if (!strncmp(Buffer, "map_Kd ", 7)) 269 { 270 tmpMat->setDiffuseMap(Buffer+7); 271 } 272 else if (!strncmp(Buffer, "map_Ka ", 7)) 273 { 274 tmpMat->setAmbientMap(Buffer+7); 275 } 276 else if (!strncmp(Buffer, "map_Ks ", 7)) 277 { 278 tmpMat->setSpecularMap(Buffer+7); 279 } 280 else if (!strncmp(Buffer, "bump ", 5)) 281 { 282 tmpMat->setBump(Buffer+7); 269 else if (!strncmp(buffer, "map_Kd ", 7)) 270 { 271 if (likely(tmpMat != NULL)) 272 tmpMat->setDiffuseMap(buffer+7); 273 } 274 else if (!strncmp(buffer, "map_Ka ", 7)) 275 { 276 if (likely(tmpMat != NULL)) 277 tmpMat->setAmbientMap(buffer+7); 278 } 279 else if (!strncmp(buffer, "map_Ks ", 7)) 280 { 281 if (likely(tmpMat != NULL)) 282 tmpMat->setSpecularMap(buffer+7); 283 } 284 else if (!strncmp(buffer, "bump ", 5)) 285 { 286 if (likely(tmpMat != NULL)) 287 tmpMat->setBump(buffer+7); 283 288 } 284 289 285 290 286 291 } 287 MTL_FILE->close();292 fclose(stream); 288 293 delete []fileName; 289 delete MTL_FILE;290 294 return true; 291 295 }
Note: See TracChangeset
for help on using the changeset viewer.