diff --git a/code/3DSExporter.cpp b/code/3DSExporter.cpp index 7f4a292fa..c455167b9 100644 --- a/code/3DSExporter.cpp +++ b/code/3DSExporter.cpp @@ -181,7 +181,6 @@ Discreet3DSExporter:: Discreet3DSExporter(boost::shared_ptr outfile, c : scene(scene) , writer(outfile) { - CollectTrafos(scene->mRootNode, trafos); CollectMeshes(scene->mRootNode, meshes); @@ -191,6 +190,11 @@ Discreet3DSExporter:: Discreet3DSExporter(boost::shared_ptr outfile, c ChunkWriter chunk(writer, Discreet3DS::CHUNK_OBJMESH); WriteMeshes(); WriteMaterials(); + + { + ChunkWriter chunk(writer, Discreet3DS::CHUNK_MASTER_SCALE); + writer.PutF4(1.0f); + } } { @@ -203,7 +207,6 @@ void Discreet3DSExporter::WriteMaterials() { for (unsigned int i = 0; i < scene->mNumMaterials; ++i) { ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAT_MATERIAL); - const aiMaterial& mat = *scene->mMaterials[i]; { @@ -279,10 +282,9 @@ void Discreet3DSExporter::WriteMaterials() int twosided; if (mat.Get(AI_MATKEY_TWOSIDED, twosided) == AI_SUCCESS && twosided != 0) { ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAT_TWO_SIDE); - // Intentionally no more data - if the chunk exists, the TWOSIDED - // flag is assumed to be set. + writer.PutI2(1); } - + WriteTexture(mat, aiTextureType_DIFFUSE, Discreet3DS::CHUNK_MAT_TEXTURE); WriteTexture(mat, aiTextureType_HEIGHT, Discreet3DS::CHUNK_MAT_BUMPMAP); WriteTexture(mat, aiTextureType_OPACITY, Discreet3DS::CHUNK_MAT_OPACMAP); @@ -297,9 +299,11 @@ void Discreet3DSExporter::WriteMaterials() void Discreet3DSExporter::WriteTexture(const aiMaterial& mat, aiTextureType type, uint16_t chunk_flags) { aiString path; - aiTextureMapMode map_mode = aiTextureMapMode_Wrap; + aiTextureMapMode map_mode[2] = { + aiTextureMapMode_Wrap, aiTextureMapMode_Wrap + }; float blend = 1.0f; - if (mat.GetTexture(type, 0, &path, NULL, NULL, &blend, NULL, &map_mode) != AI_SUCCESS || !path.length) { + if (mat.GetTexture(type, 0, &path, NULL, NULL, &blend, NULL, map_mode) != AI_SUCCESS || !path.length) { return; } @@ -309,21 +313,21 @@ void Discreet3DSExporter::WriteTexture(const aiMaterial& mat, aiTextureType type return; } - ChunkWriter(writer, chunk_flags); + ChunkWriter chunk(writer, chunk_flags); { - ChunkWriter(writer, Discreet3DS::CHUNK_MAPFILE); + ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAPFILE); WriteString(path); } WritePercentChunk(blend); { - ChunkWriter(writer, Discreet3DS::CHUNK_MAT_MAP_TILING); + ChunkWriter chunk(writer, Discreet3DS::CHUNK_MAT_MAP_TILING); uint16_t val = 0; // WRAP - if (map_mode == aiTextureMapMode_Mirror) { + if (map_mode[0] == aiTextureMapMode_Mirror) { val = 0x2; } - else if (map_mode == aiTextureMapMode_Decal) { + else if (map_mode[0] == aiTextureMapMode_Decal) { val = 0x10; } writer.PutU2(val);