- Timestamp:
- May 3, 2006, 2:51:12 PM (19 years ago)
- Location:
- branches/bsp_model/src/lib/graphics/importer
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/bsp_model/src/lib/graphics/importer/bsp_file.cc
r7510 r7511 1 1 /* 2 2 orxonox - the future of 3D-vertical-scrollers 3 3 4 4 Copyright (C) 2006 orx 5 5 6 6 This program is free software; you can redistribute it and/or modify 7 7 it under the terms of the GNU General Public License as published by 8 8 the Free Software Foundation; either version 2, or (at your option) 9 9 any later version. 10 10 11 11 ### File Specific: 12 12 main-programmer: bottac@ee.ethz.ch … … 36 36 {} 37 37 38 /** 39 * Loads a quake3 level (*.bsp) 40 * @param name the Name of the *.bsp file 41 */ 38 42 int BspFile::read(char* name) 39 43 { … … 222 226 PRINTF(4)("BSP FILE: Texture 0: %s. \n", &this->textures[8+ 72*i]); 223 227 this->load_textures(); 224 228 225 229 // Load the lightMaps 226 230 this->glLightMapTextures = new GLuint[this->numLightMaps]; 227 231 for(int i = 0; i < this->numLightMaps; i++) 228 232 this->glLightMapTextures[i] = this->loadLightMapToGL(this->lightMaps[i]); 229 233 230 234 //Create white texture for if no lightmap specified 231 235 glGenTextures(1, &this->whiteLightMap); 232 236 glBindTexture(GL_TEXTURE_2D, this->whiteLightMap); 233 237 //Create texture 234 238 this->whiteTexture[0]=255; 235 239 this->whiteTexture[1]=255; 236 240 this->whiteTexture[2]=255; 237 241 238 242 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 239 243 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_R, GL_REPEAT); … … 244 248 245 249 246 250 247 251 /* control the mipmap levels */ 248 252 glTexParameterf(GL_TEXTURE_ENV, GL_TEXTURE_MIN_LOD, 5); … … 252 256 glTexImage2D(GL_TEXTURE_2D, 253 257 0, 254 GL_RGB A8,258 GL_RGB, 255 259 1, 256 260 1, … … 260 264 (const GLvoid *)&(this->whiteTexture)); 261 265 262 gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA8, 1, 1,266 gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGB, 1, 1, 263 267 GL_RGB, GL_FLOAT,(const GLvoid *) &(this->whiteTexture)); 264 265 268 269 266 270 267 271 // Get the number of patches … … 313 317 } 314 318 319 /** 320 * Called by BspFile::build_tree() only. 321 */ 315 322 BspTreeNode* BspFile::build_tree_rec(int i) 316 323 { … … 324 331 float z1 =(((plane *) this->planes) [planeIndex]).z; 325 332 thisNode->leafIndex = 0; 326 thisNode->d 333 thisNode->d = (((plane *) this->planes) [planeIndex]).d; 327 334 328 335 thisNode->plane = Vector(x1,y1,z1); … … 356 363 } 357 364 365 /** 366 * returns the root node of the bsp-tree 367 */ 358 368 BspTreeNode* BspFile::get_root() 359 369 { … … 464 474 PRINTF(0)("BSP FILE: gefunden . \n"); 465 475 this->Materials[i] =this->loadMat(fileName); 466 476 467 477 } 468 478 … … 480 490 continue; 481 491 } 482 // 492 // Default Material 483 493 this->Materials[i].mat = new Material(); 484 494 this->Materials[i].mat->setDiffuse(0.1,0.1,0.1); … … 503 513 if(this->testSurf != NULL) { 504 514 if(this->testSurf->format->Amask != 0 ) tmpAMat.alpha = true; 505 else 515 else tmpAMat.alpha = false; 506 516 } else tmpAMat.alpha = false; 507 517 … … 510 520 tmp->setAmbient(1.0,1.0,1.0 ); 511 521 tmp->setSpecular(1.0,1.0,1.0); 512 // 513 // 522 // tmp->setShininess(.5); 523 // tmp->setTransparency(1.0); 514 524 515 525 tmp->setDiffuseMap(mat); … … 539 549 scale*=255.0; 540 550 sc*=scale; 541 ((unsigned char *)(&lightMapTexture))[i] = (unsigned char)sc; 542 543 551 ((unsigned char *)(&lightMapTexture))[i] = (unsigned char)sc; 552 553 544 554 } 545 555 546 556 glGenTextures(1, &lightMap); 547 557 glBindTexture(GL_TEXTURE_2D, lightMap); … … 569 579 (const GLvoid *)&lightMapTexture); 570 580 571 581 572 582 // build the MipMaps automaticaly 573 583 errorCode = gluBuild2DMipmaps(GL_TEXTURE_2D, … … 579 589 (const GLvoid *)&lightMapTexture 580 590 ); 581 591 582 592 583 593 … … 587 597 } 588 598 599 /** 600 * Generates a vertex-array, a indice-array and a texture-coordinates-array for iface. 601 * @param iface integer index of face 602 * @todo cleanup this function, let the user choose the level of tesselation 603 */ 604 605 589 606 void BspFile::tesselate(int iface) 590 607 { … … 715 732 716 733 717 //Vertice[u*(tesselation+1)+v]= 734 //Vertice[u*(tesselation+1)+v]= temp[0]*((1.0f-px)*(1.0f-px))+ temp[1]*((1.0f-px)*px*2)+ temp[2]*(px*px); 718 735 Vertice[u*(level1)+v].position[0]=temp[0].position[0]*((1.0f-px)*(1.0f-px))+temp[1].position[0]*((1.0f-px)*px*2)+temp[2].position[0]*(px*px); 719 736 Vertice[u*(level1)+v].position[1]=temp[0].position[1]*((1.0f-px)*(1.0f-px))+temp[1].position[1]*((1.0f-px)*px*2)+temp[2].position[1]*(px*px); … … 750 767 // Debug Model 751 768 //*********************************************************************************************************************** 769 752 770 this->VertexArrayModels[this->patchOffset] = new VertexArrayModel(); 753 771 VertexArrayModel* tmp = this->VertexArrayModels[this->patchOffset]; -
branches/bsp_model/src/lib/graphics/importer/bsp_file.h
r7507 r7511 156 156 brushside* brushSides; //!< 157 157 char* vertice; //!< 158 meshvert* meshverts; //!< 159 char* visData; //!< 160 char* textures; //!< 158 meshvert* meshverts; //!< Buffer to store meshverice 159 char* visData; //!< Buffer to store visibility data 160 char* textures; //!< Holds all the texture filename strings 161 161 char* patchVertice; //!< 162 162 char* patchIndexes; -
branches/bsp_model/src/lib/graphics/importer/bsp_manager.cc
r7510 r7511 1 1 /* 2 2 orxonox - the future of 3D-vertical-scrollers 3 3 4 4 Copyright (C) 2006 orx 5 5 6 6 This program is free software; you can redistribute it and/or modify 7 7 it under the terms of the GNU General Public License as published by 8 8 the Free Software Foundation; either version 2, or (at your option) 9 9 any later version. 10 10 11 11 ### File Specific: 12 12 main-programmer: bottac@ee.ethz.ch … … 51 51 // Draw Debug Terrain 52 52 /* 53 this->bspFile->Materials[0]->select(); 53 this->bspFile->Materials[0]->select(); 54 54 for(int i = 0; i < this->bspFile->numPatches ; i++) 55 56 57 58 55 { 56 this->bspFile->VertexArrayModels[i]->draw(); 57 58 } 59 59 */ 60 60 … … 103 103 if (f >=0 && !this->isAlreadyVisible(f)) { 104 104 this->alreadyVisible[f] = true; 105 /* 106 107 108 109 110 }105 /* if(ActLeaf->leafIndex == i)public final double readLEDouble() 106 { 107 this->alreadyVisible[i] = false; 108 this->draw_debug_face(f); 109 this->alreadyVisible[i] = true; 110 } 111 111 else */ 112 112 addFace(f); // "visibleFaces.append(f)" … … 131 131 leaf& curLeaf = (this->bspFile->leaves)[i] ; 132 132 cluster = curLeaf.cluster; 133 133 134 134 if(cluster <0) continue; 135 135 v = ((viscluster * ( ((int *)this->bspFile->visData)[1]) ) + (cluster / 8)); 136 136 visSet =((unsigned char*) (this->bspFile->visData))[v+8]; 137 138 137 138 139 139 if( ((visSet) & ((unsigned char)1 <<(unsigned char) (cluster & 7))) == 0 ) 140 140 { … … 194 194 // this->lastTex = curFace.texture; 195 195 //} 196 197 if(curFace.lm_index < 0) 196 197 if(curFace.lm_index < 0) 198 198 { 199 199 glActiveTextureARB(GL_TEXTURE1_ARB); 200 glBindTexture(GL_TEXTURE_2D, this->bspFile-> glLightMapTextures[this->bspFile->whiteLightMap]);200 glBindTexture(GL_TEXTURE_2D, this->bspFile->whiteLightMap ); 201 201 glEnable(GL_TEXTURE_2D); 202 202 } … … 207 207 glEnable(GL_TEXTURE_2D); 208 208 } 209 209 210 210 glColor4f(3.0,3.0,3.0,0.9); 211 glEnableClientState(GL_VERTEX_ARRAY ); 211 glEnableClientState(GL_VERTEX_ARRAY ); 212 212 //glEnableClientState(GL_TEXTURE_COORD_ARRAY ); 213 213 glEnableClientState(GL_NORMAL_ARRAY ); 214 214 // glEnableClientState(GL_COLOR_ARRAY); 215 215 216 216 217 217 glVertexPointer(3, GL_FLOAT, stride, &(curVertex[offset].position[0])); 218 218 219 219 glClientActiveTextureARB(GL_TEXTURE0_ARB); 220 220 glTexCoordPointer(2, GL_FLOAT, stride, &(curVertex[offset].texcoord[0])); 221 221 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 222 222 223 223 glClientActiveTextureARB(GL_TEXTURE1_ARB); 224 224 glTexCoordPointer(2, GL_FLOAT, stride, &(curVertex[offset].texcoord[1])); 225 225 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 226 226 227 227 228 228 glNormalPointer( GL_FLOAT, stride, &(curVertex[offset].normal[0])); 229 229 // glColorPointer(4, GL_BYTE, stride, &(curVertex[offset].color[0])); … … 287 287 void BspManager::draw_patch(face* Face) 288 288 { 289 if(this->lastTex != Face->texture) {289 //if(this->lastTex != Face->texture) { 290 290 this->bspFile->Materials[Face->texture].mat->select(); 291 this->lastTex = Face->texture;292 }293 294 295 296 if(Face->lm_index < 0) 291 //this->lastTex = Face->texture; 292 //} 293 294 295 296 if(Face->lm_index < 0) 297 297 { 298 298 glActiveTextureARB(GL_TEXTURE1_ARB); 299 glBindTexture(GL_TEXTURE_2D, this->bspFile-> glLightMapTextures[this->bspFile->whiteLightMap]);299 glBindTexture(GL_TEXTURE_2D, this->bspFile->whiteLightMap); 300 300 glEnable(GL_TEXTURE_2D); 301 301 } … … 307 307 } 308 308 glColor4f(3.0,3.0,3.0,0.9); 309 309 310 310 glEnable( GL_AUTO_NORMAL); 311 311 glEnableClientState(GL_VERTEX_ARRAY ); … … 314 314 glFrontFace(GL_CW); 315 315 //PRINTF(0)("BSP Manager: Face->size[0]: %i . \n", Face->size[0]); 316 317 316 317 318 318 glEnableClientState(GL_NORMAL_ARRAY ); 319 319 320 320 glVertexPointer(3, GL_FLOAT,44, &((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).position[0])); 321 322 321 322 323 323 glClientActiveTextureARB(GL_TEXTURE0_ARB); 324 324 glTexCoordPointer(2, GL_FLOAT, 44, &((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).texcoord[0][0])); 325 325 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 326 326 327 327 328 328 glClientActiveTextureARB(GL_TEXTURE1_ARB); 329 329 glTexCoordPointer(2, GL_FLOAT, 44, &((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).texcoord[1][0])); 330 330 glEnableClientState(GL_TEXTURE_COORD_ARRAY); 331 331 332 332 333 333 glNormalPointer( GL_FLOAT, 44,&((((BspVertex*)(this->bspFile->patchVertice))[8*8*(Face->meshvert+i)]).normal[0]) ); 334 334 335 // We'll need multitexture suport for lightning 336 //glClientActiveTextureARB(GL_TEXTURE0_ARB); 337 //glTexCoordPointer(2, GL_FLOAT,0, &vertex[0].textureCoord); 338 //glClientActiveTextureARB(GL_TEXTURE1_ARB); 339 //glTexCoordPointer(2, GL_FLOAT, sizeof(BSPVertex), &vertex[0].lightmapCoord); 335 340 336 341 337 … … 344 340 & ( (((GLuint*) (this->bspFile->patchIndexes))[7*8*2*(Face->meshvert+i)+ row*2*8] )) ); 345 341 } 346 342 347 343 glFrontFace(GL_CCW); 348 344 } … … 352 348 glDisableClientState(GL_VERTEX_ARRAY ); 353 349 glDisableClientState(GL_TEXTURE_COORD_ARRAY ); 354 350 355 351 glBegin(GL_QUADS); 356 352 357 353 glEnd(); 358 354 } … … 406 402 407 403 /* 408 409 410 411 412 413 414 415 416 plane&testPlane = ((plane*)(this->bspFile->planes))[curBrushSide.plane % this->bspFile->numPlanes];417 dist = testPlane.x * this->cam.x + testPlane.y * this->cam.y + testPlane.z * this->cam.z -testPlane.d ;418 419 420 421 422 423 424 425 426 404 for(int i = 0; i < camLeaf.n_leafbrushes && i < 10; i++ ) 405 { 406 brush& curBrush = ((brush*)(this->bspFile->brushes))[(camLeaf.leafbrush_first +i)%this->bspFile->numLeafBrushes]; 407 if(curBrush.n_brushsides < 0) return; 408 for(int j = 0; j < curBrush.n_brushsides; j++) 409 { 410 float dist = -0.1; 411 brushside& curBrushSide = ((brushside*)(this->bspFile->brushSides))[(curBrush.brushside +j)%this->bspFile->numBrushSides]; 412 plane& testPlane = ((plane*)(this->bspFile->planes))[curBrushSide.plane % this->bspFile->numPlanes]; 413 dist = testPlane.x * this->cam.x + testPlane.y * this->cam.y + testPlane.z * this->cam.z -testPlane.d ; 414 415 if(dist < -0.01f) dist = -1.0f *dist; 416 if(dist < 1.0f){ 417 this->drawDebugCube(&this->cam); 418 return; 419 } 420 } 421 422 } */ 427 423 428 424 }
Note: See TracChangeset
for help on using the changeset viewer.