* support -lightmapsastexcoord conversion to .ase

This commit is contained in:
Garux
2019-12-04 21:56:02 +03:00
parent 6a5d148284
commit 74a5d6cf8d
2 changed files with 19 additions and 12 deletions

View File

@@ -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" );

View File

@@ -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++ )