Browse Source

Merge pull request #1274 from CTrauma/CT-VCOLOR-IMPORT

Ct vcolor import
JoshEngebretson 9 years ago
parent
commit
8d4bac5734

+ 3 - 2
Source/ToolCore/Import/ImportConfig.cpp

@@ -70,6 +70,8 @@ bool ImportConfig::LoadModelImporterConfig(const JSONValue& jModelImporterConfig
             valueMap_["ImportMaterials"] = GetBoolValue(jvalue, true);
         else if (key == "includeNonSkinningBones")
             valueMap_["IncludeNonSkinningBones"] = GetBoolValue(jvalue, true);
+        else if (key == "useVertexColors")
+            valueMap_["useVertexColors"] = GetBoolValue(jvalue, false);
     }
 
     return true;
@@ -99,7 +101,6 @@ bool ImportConfig::LoadDesktopConfig(JSONValue root)
     const JSONValue& jModelImporterConfig = jdesktop["ModelImporter"];
     if (jModelImporterConfig.IsObject())
         LoadModelImporterConfig(jModelImporterConfig);
- 
     const JSONValue& jTextureImporterConfig = jdesktop["TextureImporter"];
     if (jTextureImporterConfig.IsObject())
         LoadTextureImporterConfig(jTextureImporterConfig);
@@ -107,4 +108,4 @@ bool ImportConfig::LoadDesktopConfig(JSONValue root)
     return true;
 }
 
-}
+}

+ 22 - 0
Source/ToolCore/Import/OpenAssetImporter.cpp

@@ -73,6 +73,7 @@ OpenAssetImporter::OpenAssetImporter(Context* context) : Object(context) ,
     noOverwriteTexture_(true),
     noOverwriteNewerTexture_(true),
     checkUniqueModel_(true),
+    useVertexColors_(false),
     scale_(1.0f),
     maxBones_(64),
     defaultTicksPerSecond_(4800.0f),
@@ -909,6 +910,8 @@ void OpenAssetImporter::SetOveriddenFlags(VariantMap& aiFlagParameters)
             importMaterialsDefault_ = itr->second_.GetBool();
         else if (itr->first_ == "IncludeNonSkinningBones")
             includeNonSkinningBonesDefault_ = itr->second_.GetBool();
+        else if (itr->first_ == "useVertexColors")
+            useVertexColors_ = itr->second_.GetBool();
 
         itr++;
     }
@@ -1286,6 +1289,25 @@ bool OpenAssetImporter::BuildAndSaveMaterial(aiMaterial* material, HashSet<Strin
     if (hasAlpha)
         techniqueName += "Alpha";
 
+    // See if any mesh that uses this material has vertex colors
+    // and set the technique accordingly, if enabled
+    for (unsigned i = 0; i < scene_->mNumMeshes && useVertexColors_; i++)
+    {
+        aiMesh* mesh = scene_->mMeshes[i];
+        aiMaterial* mesh_material = scene_->mMaterials[mesh->mMaterialIndex];
+        aiString meshMatNameStr;
+        mesh_material->Get(AI_MATKEY_NAME, meshMatNameStr);
+
+        if(mesh->GetNumColorChannels() > 0)
+        {
+             if(matNameStr == meshMatNameStr)
+             {
+                 techniqueName += "VCol";
+                 break;
+             }
+        }
+    }
+
     XMLElement techniqueElem = materialElem.CreateChild("technique");
     techniqueElem.SetString("name", techniqueName + ".xml");
 

+ 1 - 0
Source/ToolCore/Import/OpenAssetImporter.h

@@ -131,6 +131,7 @@ private:
     bool noOverwriteTexture_;
     bool noOverwriteNewerTexture_;
     bool checkUniqueModel_;
+    bool useVertexColors_;
     float scale_;
     unsigned maxBones_;