参考:http://www.cnblogs.com/zengqh/archive/2012/08/03/2621307.html 及irrlicht0.1源代码CQ3LevelMesh
struct tBSPHeader { s32 strID; // This should always be ‘IBSP‘ s32 version; // This should be 0x2e for Quake 3 files };
Entities(实体)
存储了地图相关的信息,包括地图名称、武器、盔甲、HP等,这个块只包含一条信息,即一个包含以上所有信息的字符串string,字符串长度即lump 结构体的length。
Textures
存储了依次和face、brush、brushside相关的表面、体积信息
string[64] name | 纹理名称 |
int flags | Surface flags. |
int contents | Content flags. |
存储了依次与node、brushside相关的平面集合
float[3] normal | 平面法向量 |
float dist | 从原点到平面的距离 |
存储了地图BSP树的所有内部节点,第一个节点是根节点
int plane | 平面的索引 |
int[2] children | 左、右孩子节点的索引,负值表示叶子节点:-(leaf+1) |
int[3] mins | Integer bounding box min coord. |
int[3] maxs | Integer bounding box max coord. |
存储了地图BSP数的所有叶子节点,是一个凸区域,其中包含了可视性cluster、需要渲染的表面列表、用于碰撞检测的brush.
int cluster | Visdata cluster index. |
int area | Areaportal area. |
int[3] mins | Integer bounding box min coord. |
int[3] maxs | Integer bounding box max coord. |
int leafface | 第一个面在叶面数组中的索引 |
int n_leaffaces | 包含的面数量 |
int leafbrush | 第一个叶brush在叶brush数组中的索引 |
int n_leafbrushes | 包含的brush数量 |
存储了面索引的列表,一个叶子一个列表
int face | Face index. |
Leafbrushes
存储了brush索引的列表,一个叶子一个列表
int brush | Brush index. |
Models
存储了所有的几何体,第一模型是地图的基本部分,其余为地图中可以移动部分,如门、平台、按钮
float[3] mins | Bounding box min coord. |
float[3] maxs | Bounding box max coord. |
int face | 第一个面的索引 |
int n_faces | 面数 |
int brush | 第一个brush的索引 |
int n_brushes | brush数 |
每一个brush描述了一个由包围面定义的凸面体
int brushside | 第一个包围面的索引 |
int n_brushsides | 包围面数 |
int texture | Texture index. |
定义了brush的包围面
int plane | Plane index. |
int texture | Texture index. |
Vertexes
存储了描述面的顶点信息
float[3] position | Vertex position. |
float[2][2] texcoord | Vertex texture coordinates. 0=surface, 1=lightmap. |
float[3] normal | Vertex normal. |
ubyte[4] color | Vertex color. RGBA. |
Meshverts
存储用于描述三角形网格的顶点偏移列表
int offset | Vertex index offset, relative to first vertex of corresponding face. |
Effects
存储凸面体的着色器
string[64] name | Effect shader. |
int brush | Brush that generated this effect. |
int unknown | Always 5, except in q3dm8, which has one effect with -1. |
Faces
存储了地图中所有的表面信息
int texture | Texture index. |
int effect | 效果文件, or -1. |
int type | 面类型. 1=polygon, 2=patch, 3=mesh, 4=billboard |
int vertex | 面第一个顶点的索引 |
int n_vertexes | 顶点数 |
int meshvert | Index of first meshvert. |
int n_meshverts | Number of meshverts. |
int lm_index | Lightmap index. |
int[2] lm_start | Corner of this face‘s lightmap image in lightmap.(面lightmap在lightmap中的左下角) |
int[2] lm_size | Size of this face‘s lightmap image in lightmap.(面lightmap的宽高) |
float[3] lm_origin | World space origin of lightmap. |
float[2][3] lm_vecs | World space lightmap s and t unit vectors. |
float[3] normal | Surface normal. |
int[2] size | Patch dimensions. |
Lightmaps
存储了光线映射纹理数据
ubyte[128][128][3] map | Lightmap color data. RGB. |
Lightvols
存储了光照信息
ubyte[3] ambient | Ambient color component. RGB. |
ubyte[3] directional | Directional color component. RGB. |
ubyte[2] dir | Direction to light. 0=phi, 1=theta. |
Visdata
存储了用位向量表示的cluster到cluster的可视信息。
int n_vecs | Number of vectors. |
int sz_vecs | Size of each vector, in bytes. |
ubyte[n_vecs * sz_vecs] vecs | Visibility data. One bit per cluster per vector. |
原文地址:http://4902717.blog.51cto.com/4892717/1631105