void ColladaSerializer::ColladaExporter::ColladaScene::add(const std::string& node_id, const std::string& node_name, const std::string& geom_name, const std::vector<std::string>& material_ids, const std::vector<double>& matrix) { if (!scene_opened) { openVisualScene(scene_id); scene_opened = true; } COLLADASW::Node node(mSW); node.setNodeId(node_id); node.setNodeName(node_name); node.setType(COLLADASW::Node::NODE); // The matrix attribute of an entity is basically a 4x3 representation of its ObjectPlacement. // Note that this placement is absolute, ie it is multiplied with all parent placements. double matrix_array[4][4] = { {matrix[0], matrix[3], matrix[6], matrix[ 9]}, {matrix[1], matrix[4], matrix[7], matrix[10]}, {matrix[2], matrix[5], matrix[8], matrix[11]}, { 0, 0, 0, 1} }; node.start(); node.addMatrix(matrix_array); COLLADASW::InstanceGeometry instanceGeometry(mSW); instanceGeometry.setUrl ("#" + geom_name); for (std::vector<std::string>::const_iterator it = material_ids.begin(); it != material_ids.end(); ++it) { COLLADASW::InstanceMaterial material (*it, "#" + *it); instanceGeometry.getBindMaterial().getInstanceMaterialList().push_back(material); } instanceGeometry.add(); node.end(); }
void SceneExporter::exportScene(Scene *sce) { // <library_visual_scenes> <visual_scene> std::string id_naming = id_name(sce); openVisualScene(translate_id(id_naming), id_naming); exportHierarchy(sce); closeVisualScene(); closeLibrary(); }