Пример #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="mesh"></param>
        /// <returns></returns>
        private Node ProcessMesh(IOMesh mesh, IOModel model)
        {
            Node n = new Node()
            {
                Name = mesh.Name,
                sID  = mesh.Name,
                ID   = mesh.Name,
                Type = Node_Type.NODE
            };

            var materials = mesh.Polygons.Select(e => e.MaterialName).Distinct();

            if (mesh.HasEnvelopes())
            {
                var geom = new Instance_Controller();

                geom.URL = "#" + GenerateGeometryController(mesh, model.Skeleton);

                n.Instance_Controller = new Instance_Controller[] { geom };

                n.Instance_Controller[0].Bind_Material = new IONET.Collada.FX.Materials.Bind_Material[]
                {
                    new Bind_Material()
                    {
                        Technique_Common = new FX.Technique_Common.Technique_Common_Bind_Material()
                        {
                            Instance_Material = materials.Select(e => new Instance_Material_Geometry()
                            {
                                Symbol = e, Target = "#" + e
                            }).ToArray()
                        }
                    }
                };
            }
            else
            {
                var geom = new Instance_Geometry();

                geom.URL = "#" + GenerateGeometry(mesh);

                n.Instance_Geometry = new Instance_Geometry[] { geom };

                n.Instance_Geometry[0].Bind_Material = new IONET.Collada.FX.Materials.Bind_Material[]
                {
                    new Bind_Material()
                    {
                        Technique_Common = new FX.Technique_Common.Technique_Common_Bind_Material()
                        {
                            Instance_Material = materials.Select(e => new Instance_Material_Geometry()
                            {
                                Symbol = e, Target = "#" + e
                            }).ToArray()
                        }
                    }
                };
            }

            return(n);
        }
Пример #2
0
        private Node GetGeometryNode(ModelPart part, int i, string modelName)
        {
            var id   = $"{modelName}-Part-{i}";
            var node = new Node()
            {
                Id   = id,
                Name = id
            };

            node.Matrix.Add(new Matrix
            {
                Sid   = "transform",
                Value = string.Format(CultureInfo.InvariantCulture, "1 0 0 {0} 0 1 0 {1} 0 0 1 {2} 0 0 0 1", part.Offset.X, part.Offset.Y, part.Offset.Z)
            });

            var instanceGeometry = new Instance_Geometry()
            {
                Url           = $"#{id}",
                Bind_Material = new Bind_Material()
            };

            var instanceMaterial = new Instance_Material
            {
                Symbol = $"{id}-material",
                Target = $"#{id}-material",
            };

            instanceMaterial.Bind_Vertex_Input.Add(new Instance_MaterialBind_Vertex_Input
            {
                Input_Set      = 0,
                Input_Semantic = "TEXCOORD",
                Semantic       = "UVMap"
            });

            instanceGeometry.Bind_Material.Technique_Common.Add(instanceMaterial);

            node.Instance_Geometry.Add(instanceGeometry);

            return(node);
        }
Пример #3
0
        public Node(XPathNodeIterator iterator, string uri)
        {
            XPathNodeIterator attributeIterator;
            attributeIterator = iterator.Current.Select("@" + XmlCollada.Node.id);
            if (attributeIterator.Count > 0)
            {
                attributeIterator.MoveNext();
                _id = attributeIterator.Current.Value;
            }
            attributeIterator = iterator.Current.Select("@" + XmlCollada.Node.name);
            if (attributeIterator.Count > 0)
            {
                attributeIterator.MoveNext();
                _name = attributeIterator.Current.Value;
            }

            XPathNodeIterator nodeIterator;
            _transforms = new XmlColladaList();
            nodeIterator = iterator.Current.SelectChildren(XmlCollada.Rotate.root, uri);
            while (nodeIterator.MoveNext())
            {
                _transforms.Add(new Rotate(nodeIterator, uri));
            }

            nodeIterator = iterator.Current.SelectChildren(XmlCollada.Translate.root, uri);
            while (nodeIterator.MoveNext())
            {
                _transforms.Add(new Translate(nodeIterator, uri));
            }

            nodeIterator = iterator.Current.SelectChildren(XmlCollada.Instance_Geometry.root, uri);
            if (nodeIterator.MoveNext())
            {
                _instanceGeometry = new Instance_Geometry(nodeIterator, uri);
            }
        }
Пример #4
0
 public Node(string id, string name, XmlColladaList transforms, Instance_Geometry instanceGeometry)
 {
     _transforms = transforms;
     if (null == _transforms) {
         _transforms = new XmlColladaList();
     }
     _id = id;
     _name = name;
     _instanceGeometry = instanceGeometry;
 }