/// <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); }
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); }
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); } }
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; }