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);
        }
Example #2
0
        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);
        }