mirror of
https://github.com/ZDoom/ZDRay.git
synced 2024-11-25 13:21:55 +00:00
- add support for outputting a debug mesh of the entire map
This commit is contained in:
parent
e84795cf99
commit
5a8927506a
3 changed files with 80 additions and 0 deletions
|
@ -39,6 +39,8 @@
|
|||
#include "kexlib/binFile.h"
|
||||
#include "wad.h"
|
||||
#include "framework/templates.h"
|
||||
#include <map>
|
||||
#include <vector>
|
||||
|
||||
//#define EXPORT_TEXELS_OBJ
|
||||
|
||||
|
@ -1163,6 +1165,81 @@ void kexLightmapBuilder::WriteTexturesToTGA()
|
|||
}
|
||||
}
|
||||
|
||||
void kexLightmapBuilder::WriteMeshToOBJ()
|
||||
{
|
||||
FILE *f = fopen("mesh.obj", "w");
|
||||
|
||||
std::map<int, std::vector<surface_t*>> sortedSurfs;
|
||||
|
||||
for (unsigned int i = 0; i < surfaces.Length(); i++)
|
||||
sortedSurfs[surfaces[i]->lightmapNum].push_back(surfaces[i]);
|
||||
|
||||
for (const auto &it : sortedSurfs)
|
||||
{
|
||||
for (const auto &s : it.second)
|
||||
{
|
||||
for (int j = 0; j < s->numVerts; j++)
|
||||
{
|
||||
fprintf(f, "v %f %f %f\n", s->verts[j].x, s->verts[j].z + 100.0f, s->verts[j].y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (const auto &it : sortedSurfs)
|
||||
{
|
||||
for (const auto &s : it.second)
|
||||
{
|
||||
for (int j = 0; j < s->numVerts; j++)
|
||||
{
|
||||
fprintf(f, "vt %f %f\n", s->lightmapCoords[j * 2], s->lightmapCoords[j * 2 + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int voffset = 1;
|
||||
for (const auto &it : sortedSurfs)
|
||||
{
|
||||
int lightmapNum = it.first;
|
||||
|
||||
if (lightmapNum != -1)
|
||||
fprintf(f, "usemtl lightmap_%02d\n", lightmapNum);
|
||||
else
|
||||
fprintf(f, "usemtl black\n");
|
||||
|
||||
for (const auto &s : it.second)
|
||||
{
|
||||
switch (s->type)
|
||||
{
|
||||
case ST_FLOOR:
|
||||
for (int j = 2; j < s->numVerts; j++)
|
||||
{
|
||||
fprintf(f, "f %d/%d %d/%d %d/%d\n", voffset + j, voffset + j, voffset + j - 1, voffset + j - 1, voffset, voffset);
|
||||
}
|
||||
break;
|
||||
case ST_CEILING:
|
||||
for (int j = 2; j < s->numVerts; j++)
|
||||
{
|
||||
fprintf(f, "f %d/%d %d/%d %d/%d\n", voffset, voffset, voffset + j - 1, voffset + j - 1, voffset + j, voffset + j);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
for (int j = 2; j < s->numVerts; j++)
|
||||
{
|
||||
if (j % 2 == 0)
|
||||
fprintf(f, "f %d/%d %d/%d %d/%d\n", voffset + j - 2, voffset + j - 2, voffset + j - 1, voffset + j - 1, voffset + j, voffset + j);
|
||||
else
|
||||
fprintf(f, "f %d/%d %d/%d %d/%d\n", voffset + j, voffset + j, voffset + j - 1, voffset + j - 1, voffset + j - 2, voffset + j - 2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
voffset += s->numVerts;
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
//
|
||||
// kexLightmapBuilder::ExportTexelsToObjFile
|
||||
//
|
||||
|
|
|
@ -47,6 +47,7 @@ public:
|
|||
void LightSurface(const int surfid);
|
||||
void LightGrid(const int gridid);
|
||||
void WriteTexturesToTGA();
|
||||
void WriteMeshToOBJ();
|
||||
void AddLightGridLump(kexWadFile &wadFile);
|
||||
void AddLightmapLumps(kexWadFile &wadFile);
|
||||
|
||||
|
|
|
@ -80,6 +80,8 @@ int main(int argc, char **argv)
|
|||
builder.CreateLightmaps(loader.Level);
|
||||
builder.WriteTexturesToTGA();
|
||||
|
||||
builder.WriteMeshToOBJ();
|
||||
|
||||
loader.Level.CleanupThingLights();
|
||||
|
||||
lump = inwad.LumpAfterMap(lump);
|
||||
|
|
Loading…
Reference in a new issue