From 4c59a00d2b4040d0ab33075e3aac274df8aee77f Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Wed, 20 Jul 2016 19:05:55 -0600 Subject: [PATCH] light: add -debugvert command --- include/light/light.h | 3 +++ light/light.cc | 47 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/include/light/light.h b/include/light/light.h index 5b307ca1..965603ae 100644 --- a/include/light/light.h +++ b/include/light/light.h @@ -228,6 +228,9 @@ extern sun_t *suns; extern int dump_facenum; extern bool dump_face; + +extern int dump_vertnum; +extern bool dump_vert; /* command-line options */ diff --git a/light/light.cc b/light/light.cc index b96f8a0f..22cef215 100644 --- a/light/light.cc +++ b/light/light.cc @@ -108,6 +108,11 @@ int dump_facenum = -1; bool dump_face; vec3_t dump_face_point = {0,0,0}; +int dump_vertnum = -1; +bool dump_vert; +vec3_t dump_vert_point = {0,0,0}; + + void GetFileSpace(byte **lightdata, byte **colordata, byte **deluxdata, int size) { @@ -1237,6 +1242,44 @@ void FindDebugFace(const bsp2_t *bsp) dump_facenum = facenum; } +// returns the vert nearest the given point +static int +Vertex_NearestPoint(const bsp2_t *bsp, const vec3_t point) +{ + int nearest_vert = -1; + vec_t nearest_dist = VECT_MAX; + + for (int i=0; inumvertexes; i++) { + const dvertex_t *vertex = &bsp->dvertexes[i]; + + vec3_t distvec; + VectorSubtract(vertex->point, point, distvec); + vec_t dist = VectorLength(distvec); + + if (dist < nearest_dist) { + nearest_dist = dist; + nearest_vert = i; + } + } + + return nearest_vert; +} + +void FindDebugVert(const bsp2_t *bsp) +{ + if (!dump_vert) + return; + + int v = Vertex_NearestPoint(bsp, dump_vert_point); + const dvertex_t *vertex = &bsp->dvertexes[v]; + + logprint("FindDebugVert: dumping vert %d at %f %f %f\n", v, + vertex->point[0], + vertex->point[1], + vertex->point[2]); + dump_vertnum = v; +} + static void PrintUsage() { printf("usage: light [options] mapname.bsp\n" @@ -1581,6 +1624,9 @@ main(int argc, const char **argv) } else if ( !strcmp( argv[ i ], "-debugface" ) ) { ParseVec3(dump_face_point, &i, argc, argv); dump_face = true; + } else if ( !strcmp( argv[ i ], "-debugvert" ) ) { + ParseVec3(dump_vert_point, &i, argc, argv); + dump_vert = true; } else if ( !strcmp( argv[ i ], "-sunlight" ) ) { sunlight.value = ParseVec(&i, argc, argv); sunlight.locked = true; @@ -1691,6 +1737,7 @@ main(int argc, const char **argv) LoadEntities(bsp); FindDebugFace(bsp); + FindDebugVert(bsp); modelinfo = (modelinfo_t *)malloc(bsp->nummodels * sizeof(*modelinfo)); FindModelInfo(bsp, lmscaleoverride);