Hi Jeff,
I guess I should share a feedback.
After some experiments, I managed to merge multiple Collada files into a single one with following simple code (with pycollada, not meshtool). With limited knowledge about Collada format and pycollada code, I am not sure if my implementation makes sense at all, but I do get the expected results in my particular application. Any comment or suggestion is appreciated.
import collada
def merge_collada_files(list_fpath_inputs, fpath_output):
list_collada_objects = []
for fpath_input in list_fpath_inputs:
list_collada_objects.append(collada.Collada(fpath_input))
merged_collada_object = merge_collada_objects(list_collada_objects)
merged_collada_object.write(fpath_output)
def merge_collada_objects(list_collada_objects):
merged_collada_object = collada.Collada()
if len(list_collada_objects) == 0:
return merged_collada_object
merged_collada_object.assetInfo = list_collada_objects[0].assetInfo
list_nodes_of_scene = []
for mesh in list_collada_objects:
merged_collada_object.effects.extend(mesh.effects)
merged_collada_object.materials.extend(mesh.materials)
merged_collada_object.geometries.extend(mesh.geometries)
for scene in mesh.scenes:
list_nodes_of_scene.extend(scene.nodes)
myscene = collada.scene.Scene("myscene", list_nodes_of_scene)
merged_collada_object.scenes.append(myscene)
merged_collada_object.scene = myscene
return merged_collada_object
# here is one example to use the above code
fpath_output = "D:\\download\\dae_examples\\merged.dae"
list_fpath_inputs = []
list_fpath_inputs.append("D:\\download\\dae_examples\\1.dae")
list_fpath_inputs.append("D:\\download\\dae_examples\\2.dae")
merge_collada_files(list_fpath_inputs, fpath_output)
Thanks,
Kang