Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/branches/bsp_model/src/lib/graphics/importer/bsp_file.h @ 7385

Last change on this file since 7385 was 7385, checked in by bottac, 18 years ago

Minor improvements (transparancy). Code formatting revised.

File size: 4.2 KB
Line 
1/*
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*/
14
15class SDL_Surface;
16class BspTreeNode;
17class Vector;
18class Material;
19class VertexArrayModel;
20
21typedef struct
22{
23  float x;
24  float y;
25  float z;
26  float d;
27}
28plane;
29
30typedef struct
31{
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}
39model;
40
41typedef struct
42{
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}
49node;
50
51typedef struct
52{
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}
62leaf;
63
64typedef struct
65{
66  int brushside;        //First brushside for brush.
67  int n_brushsides;     //Number of brushsides for brush.
68  int texture;  //Texture index.
69}
70brush;
71
72typedef struct
73{
74  int plane; //Plane index.
75  int texture;  //Texture index.
76}
77brushside;
78
79struct face
80{
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.
95} ;
96
97typedef struct
98{
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}
104BspVertex;
105
106typedef struct
107{
108  int offset;
109}
110meshvert;
111
112typedef struct
113{
114  float position [ 3 ];
115}
116BspVec;
117
118typedef struct
119{
120  Material* mat;
121  bool alpha;
122}
123AMat;
124
125class BspFile
126{
127  friend class BspManager;
128
129public:
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 );
137
138
139private:
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;            //!<
155
156
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
180};
181
Note: See TracBrowser for help on using the repository browser.