private void ExportMeshBinding(Model model, string skelRef, MeshBinding meshBinding, List <geometry> geometries, List <controller> controllers, List <node> geomNodes) { var exporter = new ColladaMeshExporter(meshBinding.Mesh, Options); var mesh = exporter.Export(); var geom = new geometry(); geom.id = meshBinding.Mesh.Name + "-geom"; geom.name = meshBinding.Mesh.Name; geom.Item = mesh; geometries.Add(geom); bool hasSkin = skelRef != null && meshBinding.Mesh.IsSkinned(); skin skin = null; controller ctrl = null; if (hasSkin) { var boneNames = new Dictionary <string, Bone>(); foreach (var bone in model.Skeleton.Bones) { boneNames.Add(bone.Name, bone); } skin = ExportSkin(meshBinding.Mesh, model.Skeleton.Bones, boneNames, geom.id); ctrl = new controller(); ctrl.id = meshBinding.Mesh.Name + "-skin"; ctrl.name = meshBinding.Mesh.Name + "_Skin"; ctrl.Item = skin; controllers.Add(ctrl); } var geomNode = new node(); geomNode.id = geom.name + "-node"; geomNode.name = geom.name; geomNode.type = NodeType.NODE; if (hasSkin) { var controllerInstance = new instance_controller(); controllerInstance.url = "#" + ctrl.id; controllerInstance.skeleton = new string[] { "#" + skelRef }; geomNode.instance_controller = new instance_controller[] { controllerInstance }; } else { var geomInstance = new instance_geometry(); geomInstance.url = "#" + geom.id; geomNode.instance_geometry = new instance_geometry[] { geomInstance }; } geomNodes.Add(geomNode); }
private static library_visual_scenes MakeVisualScenesLibrary(ref Model3D mdl) { library_visual_scenes lib_visuals = new library_visual_scenes(); visual_scene vs = new visual_scene(); vs.id = "scene"; node geo_node = new node(); geo_node.id = "node"; geo_node.name = "node"; geo_node.type = NodeType.NODE; matrix transform_matrix = new matrix(); transform_matrix.Values = new double[] { 1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1 }; geo_node.Items = new object[] { transform_matrix }; geo_node.ItemsElementName = new ItemsChoiceType2[] { ItemsChoiceType2.matrix }; transform_matrix.sid = "transform"; int len = mdl.builder.TextureImages.Count; instance_geometry geo = new instance_geometry(); geo.url = "#geometry"; geo.bind_material = MakeBindedMaterial(ref mdl); geo_node.instance_geometry = new instance_geometry[] { geo }; vs.node = new node[] { geo_node }; lib_visuals.visual_scene = new visual_scene[] { vs }; return(lib_visuals); }