Forráskód Böngészése

Merge pull request #3916 from jagoon/fix-fbx-exporter2

Fix fbx exporter bug if root node contains meshes.
Kim Kulling 4 éve
szülő
commit
cdc1bf8e10
1 módosított fájl, 18 hozzáadás és 14 törlés
  1. 18 14
      code/AssetLib/FBX/FBXExporter.cpp

+ 18 - 14
code/AssetLib/FBX/FBXExporter.cpp

@@ -541,10 +541,17 @@ void FBXExporter::WriteReferences ()
 // (before any actual data is written)
 // (before any actual data is written)
 // ---------------------------------------------------------------
 // ---------------------------------------------------------------
 
 
-size_t count_nodes(const aiNode* n) {
-    size_t count = 1;
+size_t count_nodes(const aiNode* n, const aiNode* root) {
+    size_t count;
+    if (n == root) {
+        count = n->mNumMeshes; // (not counting root node)
+    } else if (n->mNumMeshes > 1) {
+        count = n->mNumMeshes + 1;
+    } else {
+        count = 1;
+    }
     for (size_t i = 0; i < n->mNumChildren; ++i) {
     for (size_t i = 0; i < n->mNumChildren; ++i) {
-        count += count_nodes(n->mChildren[i]);
+        count += count_nodes(n->mChildren[i], root);
     }
     }
     return count;
     return count;
 }
 }
@@ -714,7 +721,7 @@ void FBXExporter::WriteDefinitions ()
 
 
     // Model / FbxNode
     // Model / FbxNode
     // <~~ node hierarchy
     // <~~ node hierarchy
-    count = int32_t(count_nodes(mScene->mRootNode)) - 1; // (not counting root node)
+    count = int32_t(count_nodes(mScene->mRootNode, mScene->mRootNode));
     if (count) {
     if (count) {
         n = FBX::Node("ObjectType", "Model");
         n = FBX::Node("ObjectType", "Model");
         n.AddChild("Count", count);
         n.AddChild("Count", count);
@@ -2625,17 +2632,14 @@ void FBXExporter::WriteModelNodes(
                 ],
                 ],
                 new_node_uid
                 new_node_uid
             );
             );
-            // write model node
-            FBX::Node m("Model");
+
+            aiNode new_node;
             // take name from mesh name, if it exists
             // take name from mesh name, if it exists
-            std::string name = mScene->mMeshes[node->mMeshes[i]]->mName.C_Str();
-            name += FBX::SEPARATOR + "Model";
-            m.AddProperties(new_node_uid, name, "Mesh");
-            m.AddChild("Version", int32_t(232));
-            FBX::Node p("Properties70");
-            p.AddP70enum("InheritType", 1);
-            m.AddChild(p);
-            m.Dump(outstream, binary, 1);
+            new_node.mName = mScene->mMeshes[node->mMeshes[i]]->mName;
+            // write model node
+            WriteModelNode(
+                outstream, binary, &new_node, new_node_uid, "Mesh", std::vector<std::pair<std::string,aiVector3D>>()
+            );
         }
         }
     }
     }