3 registered members (VoroneTZ, monk12, Quad),
829
guests, and 4
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
WMB7 BSP
#352692
01/05/11 12:32
01/05/11 12:32
|
Joined: Jul 2006
Posts: 783 London, UK
sheefo
OP
User
|
OP
User
Joined: Jul 2006
Posts: 783
London, UK
|
Hi. I was wondering if you could document the BSP data in the WMB7 file format. I am not asking for a BSP implementation or any trade secrets, just how to interpret the data for use with my BSP tree for a project I am working on which I hope will benefit many 3DGS users. I am using the "WMB7 Simple Level format" documented in the manual. The lists I am looking for are: bsp_leafs bsp_nodes aabb_hulls bsp_blocks pvs Thanks.
|
|
|
Re: WMB7 BSP
[Re: jcl]
#353446
01/10/11 12:44
01/10/11 12:44
|
Joined: Jul 2006
Posts: 783 London, UK
sheefo
OP
User
|
OP
User
Joined: Jul 2006
Posts: 783
London, UK
|
Thanks. I have a few other questions about the WMB7 file format. How are the number of lightmaps calculated? The code I use only works for lightmaps compiled at the highest setting.
DWORD dwNumLightmaps = header.lightmaps.length / (1024 * 1024 * 3);
Also, why was path.num_edges encoded like so? Took me a while to crack.
DWORD dwNumPoints = (DWORD)path.fNumPoints;
DWORD dwNumEdges = (path.num_edges - (dwNumPoints * 3)) / 2;
|
|
|
Re: WMB7 BSP
[Re: jcl]
#354038
01/14/11 21:41
01/14/11 21:41
|
Joined: Jul 2006
Posts: 783 London, UK
sheefo
OP
User
|
OP
User
Joined: Jul 2006
Posts: 783
London, UK
|
Thanks for the help so far. Just a few more questions. Is sequential reading of the WMB file recommended? I know that there are offsets specified in the header but for speed reasons I would prefer to read sequentially. This is the order I have discovered so far. I don't know what data legacy7 and legacy1 contain, but they are not empty. Would it be possible to tell me where the remaining structures fit in the sequence so in case they are not empty I can tell my parser to skip the length of those blocks?header legacy7 legacy1 blocks materials textures palettes lightmaps lightmaps_terrain bsp_leafs bsp_nodes aabb_hulls bsp_blocks pvs objects PS: Sorry for attempting to "rape" the WMB7 file format.
|
|
|
Re: WMB7 BSP
[Re: sheefo]
#358337
02/10/11 20:18
02/10/11 20:18
|
Joined: Jul 2006
Posts: 783 London, UK
sheefo
OP
User
|
OP
User
Joined: Jul 2006
Posts: 783
London, UK
|
I was considering upgrading to the new A8 engine but I have a few questions regarding the implications this may have on my project. First off, will the file format currently used (WMB7) become obsolete? Will there be any changes in the A8 engine that I need to know about so my code can parse the newer WMB files generated by the A8 engine. Secondly, is PVS data still only avaliable for Pro version? Since I own A7 Comm I cannot use this data anyway. I really only need to know how the BSP data is stored so I can generate my own BSP tree for my project. Lastly, the question from my last post; Is sequential reading of the WMB file recommended? If so could you give me the order of the structures. Thank You Very Much! I look forward to upgrading to A8 very soon! PS: I hope you haven't forgotten about me
|
|
|
Re: WMB7 BSP
[Re: _cash_]
#363977
03/15/11 19:56
03/15/11 19:56
|
Joined: Feb 2009
Posts: 2,154
Damocles_
Expert
|
Expert
Joined: Feb 2009
Posts: 2,154
|
according to the manual: The lightmaps list is just an array of quadratic lightmaps with 3 bytes per pixel (blue, green, red) and a size of 1024x1024 pixels each So when you can calcualte the offset, and retreive the lightmap-bytes from the WMB, you could tranfrom it into a 1024x1024 RGB Bitmap.
|
|
|
Re: WMB7 BSP
[Re: jcl]
#369254
05/03/11 00:27
05/03/11 00:27
|
Joined: Jul 2006
Posts: 783 London, UK
sheefo
OP
User
|
OP
User
Joined: Jul 2006
Posts: 783
London, UK
|
This code was taken from a TXT file I backup A LONG TIME AGO so if it embaresses me by looking retarded, just remember that PLEASE.I don't have access to my current version of my source code and will not for at least a week. To be honest I havent touched the source code in a few months (she must be gagging for it) due to the lack of information of the data structures. Remember; this will benefit the community (without compromising the integrity of the engines best kept secrets). NOTE: I have since forgotten the meaning behind some data, such as bsp_blocks, which is just (in my case) and array of 20 32-bit integers. NOTE: I do remember that this map only had 5 regions. NOTE: I did my best using the manual.
////////////////////////////////////////////////////////////////
// bsp_leafs
typedef struct {
unsigned long type; // root = 0xFFFFFF80, child = 0xFFFFFF00
long region;
float plane[4];
long _unused_;
long lBlockIndex; // x = block offset
long lNumBlocks; // y = num blocks
} WMB7_BSP_LEAFS;
// NOTE: x+y = next leaf x
// x = block offset
// y = num blocks
WMB7_BSP_LEAFS bsp_leafs[5];
// NOTE: Number of leafs = Number of regions
// Each leaf is 36 bytes. There is always one leaf (the root) even without BSP.
file.Seek(header.bsp_leafs.offset);
file.Read(&bsp_leafs, header.bsp_leafs.length);
////////////////////////////////////////////////////////////////
// bsp_blocks
typedef struct {
long a;
long unused0; // 0
float c[3];
long unused1; // 0
long next; // ?
long prev; // ?
long lSurfaceOffset; // ?
long lVisibleSurfaces; // ?
} WMB7_BSP_NODES;
WMB7_BSP_NODES bsp_nodes[15];
file.Seek(header.bsp_nodes.offset);
file.Read(&bsp_nodes, header.bsp_nodes.length);
////////////////////////////////////////////////////////////////
// aabb_hulls
file.Skip(header.aabb_hulls.length);
////////////////////////////////////////////////////////////////
// bsp_blocks
unsigned long bsp_blocks[20];
file.Seek(header.bsp_blocks.offset);
file.Read(&bsp_blocks, header.bsp_blocks.length);
////////////////////////////////////////////////////////////////
// pvs
file.Skip(header.pvs.length);
////////////////////////////////////////////////////////////////
// objects
file.Skip(header.objects.length);
////////////////////////////////////////////////////////////////
Many, many thanks!
|
|
|
Re: WMB7 BSP
[Re: sheefo]
#479278
03/13/20 11:22
03/13/20 11:22
|
Joined: Jul 2000
Posts: 27,977 Frankfurt
jcl
Chief Engineer
|
Chief Engineer
Joined: Jul 2000
Posts: 27,977
Frankfurt
|
typedef struct {
long type; // 8 = Region
float mins[3],maxs[3]; // Bounding Box
void* event; // Trigger-Aktion
long flags;
char name[ENT_NAMESIZE];
} E_REGION;
|
|
|
|