From 74a5d6cf8da887b829efa560cd6efcb30729f1b2 Mon Sep 17 00:00:00 2001 From: Garux Date: Wed, 4 Dec 2019 21:56:02 +0300 Subject: [PATCH] * support -lightmapsastexcoord conversion to .ase --- tools/quake3/q3map2/convert_ase.c | 7 ++++++- tools/quake3/q3map2/convert_obj.c | 24 +++++++++++++----------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/tools/quake3/q3map2/convert_ase.c b/tools/quake3/q3map2/convert_ase.c index 15c8a1a7..87e159e8 100644 --- a/tools/quake3/q3map2/convert_ase.c +++ b/tools/quake3/q3map2/convert_ase.c @@ -140,7 +140,12 @@ static void ConvertSurface( FILE *f, bspModel_t *model, int modelNum, bspDrawSur { v = i + ds->firstVert; dv = &bspDrawVerts[ v ]; - fprintf( f, "\t\t\t*MESH_TVERT\t%d\t%f\t%f\t%f\r\n", i, dv->st[ 0 ], ( 1.0 - dv->st[ 1 ] ), 1.0f ); + if ( lightmapsAsTexcoord ) { + fprintf( f, "\t\t\t*MESH_TVERT\t%d\t%f\t%f\t%f\r\n", i, dv->lightmap[0][0], ( 1.0 - dv->lightmap[0][1] ), 1.0f ); // dv->lightmap[0][1] internal, ( 1.0 - dv->lightmap[0][1] ) external + } + else{ + fprintf( f, "\t\t\t*MESH_TVERT\t%d\t%f\t%f\t%f\r\n", i, dv->st[ 0 ], ( 1.0 - dv->st[ 1 ] ), 1.0f ); + } } fprintf( f, "\t\t}\r\n" ); diff --git a/tools/quake3/q3map2/convert_obj.c b/tools/quake3/q3map2/convert_obj.c index a60e9f74..cf8d4c1e 100644 --- a/tools/quake3/q3map2/convert_obj.c +++ b/tools/quake3/q3map2/convert_obj.c @@ -71,17 +71,18 @@ static void ConvertSurfaceToOBJ( FILE *f, bspModel_t *model, int modelNum, bspDr /* export shader */ if ( lightmapsAsTexcoord ) { - if ( objLastShaderNum != ds->lightmapNum[0] ) { - fprintf( f, "usemtl lm_%04d\r\n", ds->lightmapNum[0] + deluxemap ); - objLastShaderNum = ds->lightmapNum[0] + deluxemap; + const int lmNum = ds->lightmapNum[0]; + if ( objLastShaderNum != lmNum ) { + fprintf( f, "usemtl lm_%04d\r\n", lmNum + deluxemap ); + objLastShaderNum = lmNum + deluxemap; } - if ( ds->lightmapNum[0] + (int)deluxemap < firstLightmap ) { - Sys_Warning( "lightmap %d out of range (exporting anyway)\n", ds->lightmapNum[0] + deluxemap ); - firstLightmap = ds->lightmapNum[0] + deluxemap; + if ( lmNum + (int)deluxemap < firstLightmap ) { + Sys_Warning( "lightmap %d out of range (exporting anyway)\n", lmNum + deluxemap ); + firstLightmap = lmNum + deluxemap; } - if ( ds->lightmapNum[0] > lastLightmap ) { - Sys_Warning( "lightmap %d out of range (exporting anyway)\n", ds->lightmapNum[0] + deluxemap ); - lastLightmap = ds->lightmapNum[0] + deluxemap; + if ( lmNum > lastLightmap ) { + Sys_Warning( "lightmap %d out of range (exporting anyway)\n", lmNum + deluxemap ); + lastLightmap = lmNum + deluxemap; } } else @@ -101,10 +102,10 @@ static void ConvertSurfaceToOBJ( FILE *f, bspModel_t *model, int modelNum, bspDr fprintf( f, "v %f %f %f\r\n", dv->xyz[ 0 ], dv->xyz[ 2 ], -dv->xyz[ 1 ] ); fprintf( f, "vn %f %f %f\r\n", dv->normal[ 0 ], dv->normal[ 2 ], -dv->normal[ 1 ] ); if ( lightmapsAsTexcoord ) { - fprintf( f, "vt %f %f\r\n", dv->lightmap[0][0], -dv->lightmap[0][1] ); + fprintf( f, "vt %f %f\r\n", dv->lightmap[0][0], ( 1.0 - dv->lightmap[0][1] ) ); // dv->lightmap[0][1] internal, ( 1.0 - dv->lightmap[0][1] ) external } else{ - fprintf( f, "vt %f %f\r\n", dv->st[ 0 ], -dv->st[ 1 ] ); + fprintf( f, "vt %f %f\r\n", dv->st[ 0 ], ( 1.0 - dv->st[ 1 ] ) ); } } @@ -256,6 +257,7 @@ int ConvertBSPToOBJ( char *bspName ){ fprintf( fmtl, "# Generated by Q3Map2 (ydnar) -convert -format obj\r\n" ); if ( lightmapsAsTexcoord ) { int lightmapCount; + //FIXME numBSPLightmaps must be bspLightBytes / ( game->lightmapSize * game->lightmapSize * 3 ) for ( lightmapCount = 0; lightmapCount < numBSPLightmaps; lightmapCount++ ) ; for ( ; ; lightmapCount++ )