Changeset 7385 in orxonox.OLD for branches/bsp_model
- Timestamp:
- Apr 26, 2006, 4:37:58 PM (19 years ago)
- Location:
- branches/bsp_model/src/lib/graphics/importer
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/bsp_model/src/lib/graphics/importer/bsp_file.cc
r7353 r7385 20 20 #include "debug.h" 21 21 #include "material.h" 22 #include "util/loading/resource_manager.h"23 24 22 #include "vertex_array_model.h" 25 23 // Necessary ? 26 24 #include "base_object.h" 27 25 #include "vector.h" 26 #include "util/loading/resource_manager.h" 27 28 #include <SDL/SDL_endian.h> 29 #include <SDL/SDL_image.h> 28 30 29 31 using namespace std; … … 36 38 } 37 39 38 int BspFile::read(char* in_name)40 int BspFile::read(char* name) 39 41 { 40 42 int offset; 41 43 int size; 42 44 struct stat results; 43 char name [300]; 44 strcpy(name,ResourceManager::getFullName(in_name).c_str()); 45 name = "/root/data/Kanti175.bsp"; 45 46 46 47 if (stat( name , &results) == 0) … … 138 139 // Get the brushSides 139 140 offset = ((int *)(header))[20]; 140 size = ((int *)(header))[21];141 size = SDL_SwapLE32(((int *)(header))[21]); 141 142 PRINTF(0)("BSP FILE: BrushSidesSize: %i Bytes. \n", size); 142 143 PRINTF(0)("BSP FILE: NumBrushSides: %i. \n", size / 8); … … 324 325 void BspFile::load_textures() 325 326 { 326 c onst char* absFileName;327 char absFileName [228]; 327 328 char fileName [228]; 328 329 char ext [100]; 329 330 struct stat results; 330 331 331 this->Materials = new Material*[this->numTextures];332 this->Materials = new AMat[this->numTextures]; 332 333 for(int i = 0 ; i < this->numTextures; i++) 333 334 { … … 336 337 // Check for tga 337 338 strcpy(fileName, &this->textures[8+ 72*i]); 338 //strcpy (absFileName,"/root/data/trunk/");339 strcpy (absFileName,"/root/data/trunk/"); 339 340 strcpy(ext, ".tga"); 340 341 strncat (fileName, ext, strlen(fileName)); 341 //strncat(absFileName,fileName,strlen(fileName));342 absFileName = ResourceManager::getFullName(fileName).c_str();342 strncat(absFileName,fileName,strlen(fileName)); 343 // absFileName = ResourceManager::getFullName(fileName); 343 344 344 345 if(stat( absFileName , &results) == 0) … … 350 351 // Check for TGA 351 352 strcpy(fileName, &this->textures[8+ 72*i]); 352 //strcpy (absFileName,"/root/data/trunk/");353 strcpy (absFileName,"/root/data/trunk/"); 353 354 strcpy(ext, ".TGA"); 354 355 strncat (fileName, ext, strlen(fileName)); 355 //strncat(absFileName,fileName,strlen(fileName));356 strncat(absFileName,fileName,strlen(fileName)); 356 357 // absFileName = ResourceManager::getFullName(fileName); 357 absFileName = ResourceManager::getFullName(fileName).c_str(); 358 358 359 if(stat( absFileName , &results) == 0) 359 360 { … … 364 365 // Check for jpg 365 366 strcpy(fileName, &this->textures[8+ 72*i]); 366 //strcpy (absFileName,"/root/data/trunk/");367 strcpy (absFileName,"/root/data/trunk/"); 367 368 strcpy(ext, ".jpg"); 368 369 strncat (fileName, ext, strlen(fileName)); 369 //strncat(absFileName,fileName,strlen(fileName));370 strncat(absFileName,fileName,strlen(fileName)); 370 371 // absFileName = ResourceManager::getFullName(fileName); 371 absFileName = ResourceManager::getFullName(fileName).c_str();372 372 if(stat( absFileName , &results) == 0) 373 373 { … … 380 380 // Check for JPG 381 381 strcpy(fileName, &this->textures[8+ 72*i]); 382 //strcpy (absFileName,"/root/data/trunk/");382 strcpy (absFileName,"/root/data/trunk/"); 383 383 strcpy(ext, ".JPG"); 384 384 strncat (fileName, ext, strlen(fileName)); 385 //strncat(absFileName,fileName,strlen(fileName));385 strncat(absFileName,fileName,strlen(fileName)); 386 386 // absFileName = ResourceManager::getFullName(fileName); 387 absFileName = ResourceManager::getFullName(fileName).c_str();388 387 if(stat( absFileName , &results) == 0) 389 388 { … … 395 394 // Check for jpeg 396 395 strcpy(fileName, &this->textures[8+ 72*i]); 397 //strcpy (absFileName,"/root/data/trunk/");396 strcpy (absFileName,"/root/data/trunk/"); 398 397 strcpy(ext, ".jpeg"); 399 398 strncat (fileName, ext, strlen(fileName)); 400 //strncat(absFileName,fileName,strlen(fileName)); 401 // absFileName = ResourceManager::getFullName(fileName); 402 absFileName = ResourceManager::getFullName(fileName).c_str(); 399 strncat(absFileName,fileName,strlen(fileName)); 400 // absFileName = ResourceManager::getFullName(fileName); 403 401 if(stat( absFileName , &results) == 0) 404 402 { … … 411 409 // Check for JPEG 412 410 strcpy(fileName, &this->textures[8+ 72*i]); 413 //strcpy (absFileName,"/root/data/trunk/");411 strcpy (absFileName,"/root/data/trunk/"); 414 412 strcpy(ext, ".JPEG"); 415 413 strncat (fileName, ext, strlen(fileName)); 416 //strncat(absFileName,fileName,strlen(fileName));414 strncat(absFileName,fileName,strlen(fileName)); 417 415 // absFileName = ResourceManager::getFullName(fileName); 418 absFileName = ResourceManager::getFullName(fileName).c_str();419 416 PRINTF(0)("BSP FILE: %s . \n", absFileName); 420 417 if(stat( absFileName , &results) == 0) … … 427 424 // Check for bmp 428 425 strcpy(fileName, &this->textures[8+ 72*i]); 429 //strcpy (absFileName,"/root/data/trunk/");426 strcpy (absFileName,"/root/data/trunk/"); 430 427 strcpy(ext, ".bmp"); 431 428 strncat (fileName, ext, strlen(fileName)); 432 //strncat(absFileName,fileName,strlen(fileName)); 433 // absFileName = ResourceManager::getFullName(fileName); 434 absFileName = ResourceManager::getFullName(fileName).c_str(); 429 strncat(absFileName,fileName,strlen(fileName)); 430 // absFileName = ResourceManager::getFullName(fileName); 435 431 436 432 if(stat( absFileName , &results) == 0) … … 443 439 // Check for BMP 444 440 strcpy(fileName, &this->textures[8+ 72*i]); 445 //strcpy (absFileName,"/root/data/trunk/");441 strcpy (absFileName,"/root/data/trunk/"); 446 442 strcpy(ext, ".BMP"); 447 443 strncat (fileName, ext, strlen(fileName)); 448 // strncat(absFileName,fileName,strlen(fileName)); 449 // absFileName = ResourceManager::getFullName(fileName); 450 absFileName = ResourceManager::getFullName(fileName).c_str(); 444 strncat(absFileName,fileName,strlen(fileName)); 445 // absFileName = ResourceManager::getFullName(fileName); 451 446 452 447 if(stat( absFileName , &results) == 0) … … 457 452 } 458 453 // Default Material 459 this->Materials[i] = new Material();460 this->Materials[i] ->setDiffuse(0.1,0.1,0.1);461 this->Materials[i] ->setAmbient(0.1,0.1,0.1 );462 this->Materials[i] ->setSpecular(0.4,0.4,0.4);454 this->Materials[i].mat = new Material(); 455 this->Materials[i].mat->setDiffuse(0.1,0.1,0.1); 456 this->Materials[i].mat->setAmbient(0.1,0.1,0.1 ); 457 this->Materials[i].mat->setSpecular(0.4,0.4,0.4); 463 458 //this->Materials[i]->setShininess(100.0); 464 this->Materials[i]->setTransparency(1.0); 465 this->Materials[i]->setDiffuseMap("pictures/ground.tga"); 466 this->Materials[i]->setAmbientMap("pictures/ground.tga"); 467 this->Materials[i]->setSpecularMap("pictures/ground.tga"); 459 this->Materials[i].mat->setTransparency(1.0); 460 this->Materials[i].mat->setDiffuseMap("pictures/ground.tga"); 461 this->Materials[i].mat->setAmbientMap("pictures/ground.tga"); 462 this->Materials[i].mat->setSpecularMap("pictures/ground.tga"); 463 this->Materials[i].alpha = false; 468 464 } 469 465 } 470 466 471 467 472 Material*BspFile::loadMat(char* mat)468 AMat BspFile::loadMat(char* mat) 473 469 { 470 AMat tmpAMat; 471 this->testSurf = NULL; 472 473 this->testSurf = IMG_Load(ResourceManager::getFullName(mat).c_str()); 474 if(this->testSurf != NULL) 475 { 476 if(this->testSurf->format->Amask != 0 ) tmpAMat.alpha = true; 477 else tmpAMat.alpha = false; 478 } 479 else tmpAMat.alpha = false; 480 474 481 Material* tmp = new Material(); 475 482 tmp->setDiffuse(1.0,1.0,1.0); … … 477 484 tmp->setSpecular(1.0,1.0,1.0); 478 485 // tmp->setShininess(.5); 479 tmp->setTransparency(1.0);486 // tmp->setTransparency(1.0); 480 487 481 488 tmp->setDiffuseMap(mat); 482 489 tmp->setAmbientMap(mat); 483 490 tmp->setSpecularMap(mat); 484 485 return tmp; 491 492 tmpAMat.mat = tmp; 493 494 return tmpAMat; 486 495 } 487 496 -
branches/bsp_model/src/lib/graphics/importer/bsp_file.h
r7353 r7385 1 1 /* 2 3 4 5 6 7 8 9 10 11 12 2 orxonox - the future of 3D-vertical-scrollers 3 4 Copyright (C) 2006 orx 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 ### File Specific: 12 main-programmer: bottac@ee.ethz.ch 13 13 */ 14 14 15 15 class SDL_Surface; 16 16 class BspTreeNode; 17 17 class Vector; … … 19 19 class VertexArrayModel; 20 20 21 typedef struct 21 typedef struct 22 22 { 23 23 float x; 24 24 float y; 25 25 float z; 26 float d; 27 } plane; 26 float d; 27 } 28 plane; 28 29 29 30 typedef struct 30 31 { 31 float mins [3]; //Bounding box min coord. 32 float maxs [3]; //Bounding box max coord. 33 int face; //First face for model. 34 int n_faces; //Number of faces for model. 35 int brush; //First brush for model. 36 int n_brushes; // 37 } model; 32 float mins [ 3 ]; //Bounding box min coord. 33 float maxs [ 3 ]; //Bounding box max coord. 34 int face; //First face for model. 35 int n_faces; //Number of faces for model. 36 int brush; //First brush for model. 37 int n_brushes; // 38 } 39 model; 38 40 39 41 typedef struct 40 42 { 41 int plane; //Plane index. 42 int left; //Children indices. Negative numbers are leaf indices: -(leaf+1). 43 int right; 44 int mins[3]; //Integer bounding box min coord. 45 int maxs[3]; //Integer bounding box max coord. 46 } node; 43 int plane; //Plane index. 44 int left; //Children indices. Negative numbers are leaf indices: -(leaf+1). 45 int right; 46 int mins[ 3 ]; //Integer bounding box min coord. 47 int maxs[ 3 ]; //Integer bounding box max coord. 48 } 49 node; 47 50 48 51 typedef struct 49 52 { 50 int cluster; // Visdata cluster index. 51 int area; // Areaportal area. 52 int mins[3]; // Integer bounding box min coord. 53 int maxs[3]; // Integer bounding box max coord. 54 int leafface; // First leafface for leaf. 55 int n_leaffaces; //Number of leaffaces for leaf. 56 int leafbrush_first; // leafbrush for leaf. 57 int n_leafbrushes; // Number of leafbrushes for leaf. 58 } leaf; 53 int cluster; // Visdata cluster index. 54 int area; // Areaportal area. 55 int mins[ 3 ]; // Integer bounding box min coord. 56 int maxs[ 3 ]; // Integer bounding box max coord. 57 int leafface; // First leafface for leaf. 58 int n_leaffaces; //Number of leaffaces for leaf. 59 int leafbrush_first; // leafbrush for leaf. 60 int n_leafbrushes; // Number of leafbrushes for leaf. 61 } 62 leaf; 59 63 60 64 typedef struct 61 65 { 62 int brushside; //First brushside for brush. 63 int n_brushsides; //Number of brushsides for brush. 64 int texture; //Texture index. 65 } brush; 66 int brushside; //First brushside for brush. 67 int n_brushsides; //Number of brushsides for brush. 68 int texture; //Texture index. 69 } 70 brush; 66 71 67 72 typedef struct 68 73 { 69 int plane; //Plane index. 70 int texture; //Texture index. 71 } brushside; 74 int plane; //Plane index. 75 int texture; //Texture index. 76 } 77 brushside; 72 78 73 79 struct face 74 80 { 75 76 77 78 79 80 81 82 83 int lm_start [2]; // Corner of this face's lightmap image in lightmap.84 int lm_size[2]; // Size of this face's lightmap image in lightmap.85 float lm_origin [3] ;// World space origin of lightmap.86 float lm_vecs [2][3];// World space lightmap s and t unit vectors.87 float normal[3];// Surface normal.88 int size [2] ;// Patch dimensions.81 int texture; // Texture index. 82 int effect; // Index into lump 12 (Effects), or -1. 83 int type; // Face type. 1=polygon, 2=patch, 3=mesh, 4=billboard 84 int vertex; // Index of first vertex. 85 int n_vertexes; // Number of vertices. 86 int meshvert; // Index of first meshvert. 87 int n_meshverts; // Number of meshverts. 88 int lm_index; // Lightmap index. 89 int lm_start [ 2 ]; // Corner of this face's lightmap image in lightmap. 90 int lm_size[ 2 ]; // Size of this face's lightmap image in lightmap. 91 float lm_origin [ 3 ] ; // World space origin of lightmap. 92 float lm_vecs [ 2 ][ 3 ]; // World space lightmap s and t unit vectors. 93 float normal[ 3 ]; // Surface normal. 94 int size [ 2 ] ; // Patch dimensions. 89 95 } ; 90 96 91 97 typedef struct 92 98 { 93 float position[3]; // Vertex position. 94 float texcoord[2][2]; // Vertex texture coordinates. 0=surface, 1=lightmap. 95 float normal[3]; // Vertex normal. 96 unsigned char color [4]; // Vertex color. RGBA. 97 }BspVertex; 99 float position[ 3 ]; // Vertex position. 100 float texcoord[ 2 ][ 2 ]; // Vertex texture coordinates. 0=surface, 1=lightmap. 101 float normal[ 3 ]; // Vertex normal. 102 unsigned char color [ 4 ]; // Vertex color. RGBA. 103 } 104 BspVertex; 98 105 99 106 typedef struct 100 107 { 101 int offset; 102 } meshvert; 108 int offset; 109 } 110 meshvert; 103 111 104 typedef struct 112 typedef struct 105 113 { 106 float position [3]; 107 } BspVec; 114 float position [ 3 ]; 115 } 116 BspVec; 108 117 109 class BspFile 118 typedef struct 110 119 { 111 public: 112 BspFile(); 113 int read(char* name); 114 void build_tree(); 115 void load_textures(); 116 void tesselate(int iface); 117 BspTreeNode* get_root(); 118 Material * loadMat(char* mat); 120 Material* mat; 121 bool alpha; 122 } 123 AMat; 119 124 120 BspTreeNode* root; 121 char header [280]; // Buffer for header of BSP-File 122 char* nodes; // Buffer to store BSP-Tree-Nodes 123 char* leaves; // Buffer to store BSP-Tree-Leaves 124 char* planes; // Buffer to store planes separateing the space 125 char* bspModels; // Buffer to store BSP-Model-List 126 char* leafFaces; // Buffer to store leafFaces 127 char* faces; // 128 char* leafBrushes; // Buffer to store brush indice 129 char* brushes; // Buffer to store brushes 130 char* brushSides; // 131 char* vertice; // 132 char* meshverts; 133 char* visData; 134 char* textures; 125 class BspFile 126 { 127 friend class BspManager; 128 129 public: 130 BspFile(); 131 int read( char* name ); 132 void build_tree(); 133 void load_textures(); 134 void tesselate( int iface ); 135 BspTreeNode* get_root(); 136 AMat loadMat( char* mat ); 135 137 136 138 137 char* patchVertice; 138 char* patchIndexes; 139 char* patchTrianglesPerRow; 140 int** patchRowIndexes; 141 VertexArrayModel** VertexArrayModels; 142 int patchOffset; 139 private: 140 BspTreeNode* root; 141 char header [ 280 ]; //!< Buffer for header of BSP-File 142 char* nodes; //!< Buffer to store BSP-Tree-Nodes 143 char* leaves; //!< Buffer to store BSP-Tree-Leaves 144 char* planes; //!< Buffer to store planes separateing the space 145 char* bspModels; //!< Buffer to store BSP-Model-List 146 char* leafFaces; //!< Buffer to store leafFaces 147 char* faces; //!< 148 char* leafBrushes; //!< Buffer to store brush indice 149 char* brushes; //!< Buffer to store brushes 150 char* brushSides; //!< 151 char* vertice; //!< 152 char* meshverts; //!< 153 char* visData; //!< 154 char* textures; //!< 143 155 144 int numNodes;145 int numLeafs;146 int numVertex;147 int numPlanes;148 int numBspModels;149 int numLeafFaces;150 int numFaces;151 int numLeafBrushes;152 int numTextures;153 int numPatches;154 int numBrushSides;155 156 BspTreeNode* build_tree_rec(int i);157 Material** Materials;158 156 159 157 char* patchVertice; 158 char* patchIndexes; 159 char* patchTrianglesPerRow; 160 int** patchRowIndexes; 161 VertexArrayModel** VertexArrayModels; 162 int patchOffset; 163 164 int numNodes; 165 int numLeafs; 166 int numVertex; 167 int numPlanes; 168 int numBspModels; 169 int numLeafFaces; 170 int numFaces; 171 int numLeafBrushes; 172 int numTextures; 173 int numPatches; 174 int numBrushSides; 175 176 BspTreeNode* build_tree_rec( int i ); 177 AMat* Materials; 178 SDL_Surface* testSurf; 179 160 180 }; 161 181 -
branches/bsp_model/src/lib/graphics/importer/bsp_manager.cc
r7353 r7385 17 17 #include "bsp_file.h" 18 18 #include "bsp_manager.h" 19 #include "bsp_tree_ node.h"19 #include "bsp_tree_leaf.h" 20 20 #include "p_node.h" 21 21 #include "state.h" … … 23 23 #include "material.h" 24 24 #include "camera.h" 25 26 25 #include "vertex_array_model.h" 27 26 28 29 30 27 // STL Containers 28 #include <vector> 29 #include <deque> 31 30 32 31 … … 37 36 // open a BSP file 38 37 this->bspFile = new BspFile(); 39 this->bspFile->read(" Kanti175.bsp");38 this->bspFile->read("/root/data/Kanti175.bsp"); 40 39 this->bspFile->build_tree(); 41 40 this->root = this->bspFile->get_root(); … … 64 63 // erase alreadyVisible 65 64 for(int i = 0; i < this->bspFile->numFaces; i++) this->alreadyVisible[i] = false; 66 float tmp = 0; 65 float tmp = 0; 66 this->opal.clear(); 67 this->trasparent.clear(); 67 68 // Find all visible faces... 68 69 … … 110 111 this->alreadyVisible[i] = true; 111 112 } 112 else */ draw_face(f); // "visibleFaces.append(f)"113 else */addFace(f); // "visibleFaces.append(f)" 113 114 } 114 115 } … … 150 151 if (!this->isAlreadyVisible(f) && f>=0) 151 152 { 152 this-> draw_face(f);153 this->addFace(f); 153 154 this->alreadyVisible[f] = true; 154 155 } … … 161 162 162 163 }//else 164 165 while(!this->opal.empty()) 166 { 167 this->draw_face(this->opal.front()); 168 this->opal.pop_front(); 169 } 170 while(!this->trasparent.empty()) 171 { 172 this->draw_face(this->trasparent.back()); 173 this->trasparent.pop_back(); 174 } 163 175 164 176 … … 190 202 if(this->lastTex != curFace.texture) 191 203 { 192 this->bspFile->Materials[curFace.texture] ->select();204 this->bspFile->Materials[curFace.texture].mat->select(); 193 205 this->lastTex = curFace.texture; 194 206 } … … 239 251 // if(this->bspFile->Materials[curFace.texture] != NULL) 240 252 241 this->bspFile->Materials[2] ->select();253 this->bspFile->Materials[2].mat->select(); 242 254 this->lastTex = 2; 243 255 … … 266 278 if(this->lastTex != Face->texture) 267 279 { 268 this->bspFile->Materials[Face->texture] ->select();280 this->bspFile->Materials[Face->texture].mat->select(); 269 281 this->lastTex = Face->texture; 270 282 } … … 331 343 { 332 344 dist = (node->plane.x * this->cam.x + node->plane.y*this->cam.y + node->plane.z*this->cam.z) - node->d; 333 if(dist > 1.0f)345 if(dist > 4.0f) 334 346 { 335 347 checkCollision(node->left,cam); 336 348 return; 337 349 } 338 if(dist < - 1.0f)350 if(dist < -4.0f) 339 351 { 340 352 checkCollision(node->right,cam); 341 353 return; 342 354 } 343 if(dist<= 1.0f && dist >= -1.0f)355 if(dist<=4.0f && dist >= -4.0f) 344 356 { 345 357 checkCollision(node->left,cam); … … 357 369 358 370 359 371 /* 360 372 for(int i = 0; i < camLeaf.n_leafbrushes && i < 10; i++ ) 361 373 { … … 376 388 } 377 389 378 } 390 } */ 379 391 380 392 } … … 454 466 glTexCoord2f(0.005f, 0.995f); glVertex3f(cam->x-1.0f, cam->y+ 1.0f, cam->z -1.0f); 455 467 456 457 458 glEnd(); 459 } 468 glEnd(); 469 } 470 471 void BspManager::addFace(int f) 472 { 473 face& curFace = ((face *)(this->bspFile->faces))[f]; 474 if(this->bspFile->Materials[curFace.texture].alpha) this->trasparent.push_back(f); 475 else this->opal.push_back(f); 476 } -
branches/bsp_model/src/lib/graphics/importer/bsp_manager.h
r7353 r7385 12 12 main-programmer: bottac@ee.ethz.ch 13 13 */ 14 15 #include <vector> 16 #include <deque> 14 17 15 18 … … 40 43 BspFile* bspFile; 41 44 BspTreeNode* root; 42 BspTreeNode* getLeaf(BspTreeNode* node, Vector* cam); // Traverses the tree45 const BspTreeNode* getLeaf(const BspTreeNode* node, const Vector& cam) const; // Traverses the tree 43 46 void checkCollision(BspTreeNode* node, Vector* cam); 44 47 void drawDebugCube(Vector* cam); … … 48 51 bool * alreadyVisible; 49 52 bool isAlreadyVisible(int Face); 53 void addFace(int Face); 50 54 int lastTex; 55 56 57 // Vectors to store the visible faces 58 ::std::deque<int> trasparent; // the ones with transparancy go here 59 ::std::deque<int> opal; // the others here. 60 51 61 }; 52 62
Note: See TracChangeset
for help on using the changeset viewer.