Merge multiple meshes in a node into one mesh with many primtives; write out only one mesh per node
To do: - clean up MergeMeshes - see if there’s a way to do this earlier in the flowpull/1446/head
parent
5147acfe65
commit
28523232cf
|
@ -417,7 +417,9 @@ namespace glTF2 {
|
||||||
|
|
||||||
AddRefsVector(obj, "children", n.children, w.mAl);
|
AddRefsVector(obj, "children", n.children, w.mAl);
|
||||||
|
|
||||||
AddRefsVector(obj, "meshes", n.meshes, w.mAl);
|
if (!n.meshes.empty()) {
|
||||||
|
obj.AddMember("mesh", n.meshes[0]->index, w.mAl);
|
||||||
|
}
|
||||||
|
|
||||||
AddRefsVector(obj, "skeletons", n.skeletons, w.mAl);
|
AddRefsVector(obj, "skeletons", n.skeletons, w.mAl);
|
||||||
|
|
||||||
|
|
|
@ -110,6 +110,7 @@ glTF2Exporter::glTF2Exporter(const char* filename, IOSystem* pIOSystem, const ai
|
||||||
}
|
}
|
||||||
|
|
||||||
ExportMeshes();
|
ExportMeshes();
|
||||||
|
MergeMeshes();
|
||||||
|
|
||||||
ExportScene();
|
ExportScene();
|
||||||
|
|
||||||
|
@ -743,6 +744,27 @@ void glTF2Exporter::ExportMeshes()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void glTF2Exporter::MergeMeshes()
|
||||||
|
{
|
||||||
|
for (unsigned int n = 0; n < mAsset->nodes.Size(); ++n) {
|
||||||
|
Ref<Node> node = mAsset->nodes.Get(n);
|
||||||
|
|
||||||
|
unsigned int nMeshes = node->meshes.size();
|
||||||
|
|
||||||
|
if (nMeshes) {
|
||||||
|
Ref<Mesh> firstMesh = node->meshes.at(0);
|
||||||
|
|
||||||
|
for (unsigned int m = 1; m < nMeshes; ++m) {
|
||||||
|
Ref<Mesh> mesh = node->meshes.at(m);
|
||||||
|
Mesh::Primitive primitive = mesh->primitives.at(0);
|
||||||
|
firstMesh->primitives.push_back(primitive);
|
||||||
|
}
|
||||||
|
|
||||||
|
node->meshes.erase(node->meshes.begin() + 1, node->meshes.end());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Export the root node of the node hierarchy.
|
* Export the root node of the node hierarchy.
|
||||||
* Calls ExportNode for all children.
|
* Calls ExportNode for all children.
|
||||||
|
|
|
@ -120,6 +120,7 @@ namespace Assimp
|
||||||
void ExportMetadata();
|
void ExportMetadata();
|
||||||
void ExportMaterials();
|
void ExportMaterials();
|
||||||
void ExportMeshes();
|
void ExportMeshes();
|
||||||
|
void MergeMeshes();
|
||||||
unsigned int ExportNodeHierarchy(const aiNode* n);
|
unsigned int ExportNodeHierarchy(const aiNode* n);
|
||||||
unsigned int ExportNode(const aiNode* node, glTF2::Ref<glTF2::Node>& parent);
|
unsigned int ExportNode(const aiNode* node, glTF2::Ref<glTF2::Node>& parent);
|
||||||
void ExportScene();
|
void ExportScene();
|
||||||
|
|
Loading…
Reference in New Issue