From dadf5c00206120502928ee948998d3c21944d595 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 25 Jul 2019 10:28:09 +0200 Subject: [PATCH 1/6] Fix white ambient in STL loader. A problem that sneaked in from #1293 (f84851e8931fb04e7074d487c91c3b3faa566994) due to insufficient code review, later reported in #2059 but not fixed properly. Having a white ambient practically means all other color information is ignored and the model stays bright white no matter how you set up your lighting, so putting it back to how it was before the commit above. --- code/STL/STLLoader.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/STL/STLLoader.cpp b/code/STL/STLLoader.cpp index c7144e444..199a84a44 100644 --- a/code/STL/STLLoader.cpp +++ b/code/STL/STLLoader.cpp @@ -225,7 +225,7 @@ void STLImporter::InternReadFile( const std::string& pFile, aiScene* pScene, IOS } pcMat->AddProperty(&clrDiffuse,1,AI_MATKEY_COLOR_DIFFUSE); pcMat->AddProperty(&clrDiffuse,1,AI_MATKEY_COLOR_SPECULAR); - clrDiffuse = aiColor4D( ai_real(1.0), ai_real(1.0), ai_real(1.0), ai_real(1.0)); + clrDiffuse = aiColor4D( ai_real(0.05), ai_real(0.05), ai_real(0.05), ai_real(1.0)); pcMat->AddProperty(&clrDiffuse,1,AI_MATKEY_COLOR_AMBIENT); pScene->mNumMaterials = 1; From 7e8a3ec4cbdedf85d21c6dc994c3fed7bd1c4e6e Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Thu, 25 Jul 2019 13:38:49 +0100 Subject: [PATCH 2/6] Add unit test of valid and unique Exporter IDs, rename assjson id "json" is a very vague exporter ID, change to "assjson" Add a unit test to ensure all exporter have unique IDs and that they all have an ID, description and extension --- code/Assjson/json_exporter.cpp | 9 ------ code/Common/Exporter.cpp | 6 ++-- .../ImportExport/utAssjsonImportExport.cpp | 2 +- test/unit/ImportExport/utExporter.cpp | 29 +++++++++++++++++++ 4 files changed, 33 insertions(+), 13 deletions(-) diff --git a/code/Assjson/json_exporter.cpp b/code/Assjson/json_exporter.cpp index cd542b29e..e9fa72496 100644 --- a/code/Assjson/json_exporter.cpp +++ b/code/Assjson/json_exporter.cpp @@ -34,15 +34,6 @@ namespace Assimp { void ExportAssimp2Json(const char*, Assimp::IOSystem*, const aiScene*, const Assimp::ExportProperties*); -Exporter::ExportFormatEntry Assimp2Json_desc = Assimp::Exporter::ExportFormatEntry( - "json", - "Plain JSON representation of the Assimp scene data structure", - "json", - &ExportAssimp2Json, - 0u -); - - // small utility class to simplify serializing the aiScene to Json class JSONWriter { public: diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index 87745bca9..acff29399 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -167,7 +167,7 @@ Exporter::ExportFormatEntry gExporters[] = #endif #ifndef ASSIMP_BUILD_NO_ASSXML_EXPORTER - Exporter::ExportFormatEntry( "assxml", "Assxml Document", "assxml" , &ExportSceneAssxml, 0 ), + Exporter::ExportFormatEntry( "assxml", "Assimp XML Document", "assxml" , &ExportSceneAssxml, 0 ), #endif #ifndef ASSIMP_BUILD_NO_X3D_EXPORTER @@ -183,8 +183,8 @@ Exporter::ExportFormatEntry gExporters[] = Exporter::ExportFormatEntry( "3mf", "The 3MF-File-Format", "3mf", &ExportScene3MF, 0 ), #endif -#ifndef ASSIMP_BUILD_NO_Assjson_EXPORTER - Exporter::ExportFormatEntry("json", "Plain JSON representation of the Assimp scene data structure", "json", &ExportAssimp2Json, 0) +#ifndef ASSIMP_BUILD_NO_ASSJSON_EXPORTER + Exporter::ExportFormatEntry( "assjson", "Assimp JSON Document", "json", &ExportAssimp2Json, 0) #endif }; diff --git a/test/unit/ImportExport/utAssjsonImportExport.cpp b/test/unit/ImportExport/utAssjsonImportExport.cpp index 20a2a9e24..82dbf8b57 100644 --- a/test/unit/ImportExport/utAssjsonImportExport.cpp +++ b/test/unit/ImportExport/utAssjsonImportExport.cpp @@ -57,7 +57,7 @@ public: const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/OBJ/spider.obj", aiProcess_ValidateDataStructure); Exporter exporter; - aiReturn res = exporter.Export(scene, "json", "./spider_test.json"); + aiReturn res = exporter.Export(scene, "assjson", "./spider_test.json"); return aiReturn_SUCCESS == res; } }; diff --git a/test/unit/ImportExport/utExporter.cpp b/test/unit/ImportExport/utExporter.cpp index c46a55b00..4635be2a4 100644 --- a/test/unit/ImportExport/utExporter.cpp +++ b/test/unit/ImportExport/utExporter.cpp @@ -71,3 +71,32 @@ TEST_F(ExporterTest, ProgressHandlerTest) { TestProgressHandler *ph(new TestProgressHandler); exporter.SetProgressHandler(ph); } + +// Make sure all the registered exporters have useful descriptions +TEST_F(ExporterTest, ExporterIdTest) { + Exporter exporter; + size_t exportFormatCount = exporter.GetExportFormatCount(); + EXPECT_NE(0, exportFormatCount) << "No registered exporters"; + typedef std::map ExportIdMap; + ExportIdMap exporterMap; + for (size_t i = 0; i < exportFormatCount; ++i) + { + // Check that the exporter description exists and makes sense + const aiExportFormatDesc* desc = exporter.GetExportFormatDescription(i); + ASSERT_NE(nullptr, desc) << "Missing aiExportFormatDesc at index " << i; + EXPECT_NE(nullptr, desc->id) << "Null exporter ID at index " << i; + EXPECT_STRNE("", desc->id) << "Empty exporter ID at index " << i; + EXPECT_NE(nullptr, desc->description) << "Null exporter description at index " << i; + EXPECT_STRNE("", desc->description) << "Empty exporter description at index " << i; + EXPECT_NE(nullptr, desc->fileExtension) << "Null exporter file extension at index " << i; + EXPECT_STRNE("", desc->fileExtension) << "Empty exporter file extension at index " << i; + + // Check the ID is unique + std::string key(desc->id); + std::pair result = exporterMap.emplace(key, desc); + EXPECT_TRUE(result.second) << "Duplicate exported id: '" << key << "' " << desc->description << " *." << desc->fileExtension << " at index " << i; + } + + const aiExportFormatDesc* desc = exporter.GetExportFormatDescription(exportFormatCount); + EXPECT_EQ(nullptr, desc) << "More exporters than claimed"; +} From 57a56b7b1d390a7ab0b8e93aaf6a2f01a0254725 Mon Sep 17 00:00:00 2001 From: ywang Date: Thu, 25 Jul 2019 13:14:54 -0700 Subject: [PATCH 3/6] extra layer for multi uv sets --- code/FBX/FBXExporter.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/FBX/FBXExporter.cpp b/code/FBX/FBXExporter.cpp index 08f4bdbc9..ae742dd5d 100644 --- a/code/FBX/FBXExporter.cpp +++ b/code/FBX/FBXExporter.cpp @@ -1219,6 +1219,16 @@ void FBXExporter::WriteObjects () layer.AddChild(le); layer.Dump(outstream, binary, indent); + for(unsigned int lr = 1; lr < m->GetNumUVChannels(); ++ lr) + { + FBX::Node layerExtra("Layer", int32_t(1)); + layerExtra.AddChild("Version", int32_t(100)); + FBX::Node leExtra("LayerElement"); + leExtra.AddChild("Type", "LayerElementUV"); + leExtra.AddChild("TypedIndex", int32_t(lr)); + layerExtra.AddChild(leExtra); + layerExtra.Dump(outstream, binary, indent); + } // finish the node record indent = 1; n.End(outstream, binary, indent, true); From 72e18ed4aaab85c78bae22b27216e563858ebd17 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Fri, 26 Jul 2019 09:10:09 +0100 Subject: [PATCH 4/6] Fix Travis CI sign-compare warning EXPECT_* triggers sign compare error with literal 0 and unsigned Use 0u literal with size_t --- test/unit/ImportExport/utExporter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/unit/ImportExport/utExporter.cpp b/test/unit/ImportExport/utExporter.cpp index 4635be2a4..43e711cb3 100644 --- a/test/unit/ImportExport/utExporter.cpp +++ b/test/unit/ImportExport/utExporter.cpp @@ -76,7 +76,7 @@ TEST_F(ExporterTest, ProgressHandlerTest) { TEST_F(ExporterTest, ExporterIdTest) { Exporter exporter; size_t exportFormatCount = exporter.GetExportFormatCount(); - EXPECT_NE(0, exportFormatCount) << "No registered exporters"; + EXPECT_NE(0u, exportFormatCount) << "No registered exporters"; typedef std::map ExportIdMap; ExportIdMap exporterMap; for (size_t i = 0; i < exportFormatCount; ++i) From 7fc4cf155295392c868edbfa68e8a651bddd7960 Mon Sep 17 00:00:00 2001 From: RichardTea Date: Fri, 26 Jul 2019 22:17:24 +0100 Subject: [PATCH 5/6] ASSIMP_BUILD_NO_*_EXPORTER Full fix for #2557 These macros should be all-caps. Correct the cmakelists --- code/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/CMakeLists.txt b/code/CMakeLists.txt index a8a514f73..78c8a5c93 100644 --- a/code/CMakeLists.txt +++ b/code/CMakeLists.txt @@ -810,7 +810,7 @@ ADD_ASSIMP_IMPORTER( MMD MMD/MMDVmdParser.h ) -ADD_ASSIMP_EXPORTER( Assjson +ADD_ASSIMP_EXPORTER( ASSJSON Assjson/cencode.c Assjson/cencode.h Assjson/json_exporter.cpp From d83af910959dd8f50814e85e8459fa1614026d63 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 29 Jul 2019 09:03:29 +0200 Subject: [PATCH 6/6] Update Exporter.cpp Add exporter detail. --- code/Common/Exporter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/Common/Exporter.cpp b/code/Common/Exporter.cpp index acff29399..090b561ae 100644 --- a/code/Common/Exporter.cpp +++ b/code/Common/Exporter.cpp @@ -163,7 +163,7 @@ Exporter::ExportFormatEntry gExporters[] = #endif #ifndef ASSIMP_BUILD_NO_ASSBIN_EXPORTER - Exporter::ExportFormatEntry( "assbin", "Assimp Binary", "assbin" , &ExportSceneAssbin, 0 ), + Exporter::ExportFormatEntry( "assbin", "Assimp Binary File", "assbin" , &ExportSceneAssbin, 0 ), #endif #ifndef ASSIMP_BUILD_NO_ASSXML_EXPORTER