converts a bsp drawsurface to an obj chunk
*/
+int firstLightmap = 0;
+int lastLightmap = -1;
+static void ConvertLightmapToMTL( FILE *f, const char *base, int lightmapNum );
+
int objVertexCount = 0;
int objLastShaderNum = -1;
static void ConvertSurfaceToOBJ( FILE *f, bspModel_t *model, int modelNum, bspDrawSurface_t *ds, int surfaceNum, vec3_t origin )
{
if(objLastShaderNum != ds->lightmapNum[0])
{
- fprintf(f, "usemtl lm_%04d\r\n", ds->lightmapNum[0]);
- objLastShaderNum = ds->lightmapNum[0];
+ fprintf(f, "usemtl lm_%04d\r\n", ds->lightmapNum[0] + deluxemap);
+ objLastShaderNum = ds->lightmapNum[0] + deluxemap;
+ }
+ if(ds->lightmapNum[0] + deluxemap < firstLightmap)
+ {
+ Sys_Printf( "WARNING: lightmap %d out of range (exporting anyway)\n", ds->lightmapNum[0] + deluxemap );
+ firstLightmap = ds->lightmapNum[0] + deluxemap;
+ }
+ if(ds->lightmapNum[0] > lastLightmap)
+ {
+ Sys_Printf( "WARNING: lightmap %d out of range (exporting anyway)\n", ds->lightmapNum[0] + deluxemap );
+ lastLightmap = ds->lightmapNum[0] + deluxemap;
}
}
else
strcpy( filename, si->shaderImage->filename );
else
sprintf( filename, "%s.tga", si->shader );
+
+ /* blender hates this, so let's not do it
for( c = filename; *c != '\0'; c++ )
if( *c == '/' )
*c = '\\';
+ */
/* print shader info */
fprintf( f, "newmtl %s\r\n", shader->shader );
if(shadersAsBitmap)
fprintf( f, "map_Kd %s\r\n", shader->shader );
else
+ /* blender hates this, so let's not do it
fprintf( f, "map_Kd ..\\%s\r\n", filename );
+ */
+ fprintf( f, "map_Kd ../%s\r\n", filename );
}
static void ConvertLightmapToMTL( FILE *f, const char *base, int lightmapNum )
{
/* print shader info */
fprintf( f, "newmtl lm_%04d\r\n", lightmapNum );
- fprintf( f, "map_Kd %s\\lm_%04d.tga\r\n", base, lightmapNum );
+ if(lightmapNum >= 0)
+ /* blender hates this, so let's not do it
+ fprintf( f, "map_Kd %s\\lm_%04d.tga\r\n", base, lightmapNum );
+ */
+ fprintf( f, "map_Kd %s/lm_%04d.tga\r\n", base, lightmapNum );
}
entity_t *e;
vec3_t origin;
const char *key;
- char name[ 1024 ], base[ 1024 ], mtlname[ 1024 ];
+ char name[ 1024 ], base[ 1024 ], mtlname[ 1024 ], dirname[ 1024 ];
/* note it */
Sys_Printf( "--- Convert BSP to OBJ ---\n" );
/* create the ase filename from the bsp name */
+ strcpy( dirname, bspName );
+ StripExtension( dirname );
strcpy( name, bspName );
StripExtension( name );
strcat( name, ".obj" );
Sys_Printf( "writing %s\n", mtlname );
ExtractFileBase( bspName, base );
- strcat( base, ".bsp" );
/* open it */
f = fopen( name, "wb" );
/* print header */
fprintf( f, "o %s\r\n", base );
fprintf( f, "# Generated by Q3Map2 (ydnar) -convert -format obj\r\n" );
- fprintf( f, "mtllib %s\r\n", mtlname );
+ fprintf( f, "mtllib %s.mtl\r\n", base );
fprintf( fmtl, "# Generated by Q3Map2 (ydnar) -convert -format obj\r\n" );
if(lightmapsAsTexcoord)
{
char buf[1024];
FILE *tmp;
- snprintf(buf, sizeof(buf), "%s/lm_%04d.tga", base, lightmapCount);
+ snprintf(buf, sizeof(buf), "%s/lm_%04d.tga", dirname, lightmapCount);
buf[sizeof(buf) - 1] = 0;
tmp = fopen(buf, "rb");
if(!tmp)
break;
fclose(tmp);
}
- for( i = 0; i < lightmapCount; i++ )
- ConvertLightmapToMTL( fmtl, base, i );
+ lastLightmap = lightmapCount - 1;
}
else
{
ConvertModelToOBJ( f, model, modelNum, origin );
}
+ if(lightmapsAsTexcoord)
+ {
+ for( i = firstLightmap; i <= lastLightmap; i++ )
+ ConvertLightmapToMTL( fmtl, base, i );
+ }
+
/* close the file and return */
fclose( f );
fclose( fmtl );