public virtual IEnumerable <NodeAsset> Apply(NodeAsset parentNode, INodeAsset node) { NodeAsset transformedNode = null; if (node.Mesh != null) { var transformedMaterials = node.Mesh.Materials.Select(Map).ToList(); foreach (var transformedMesh in Map(node.Mesh.Mesh)) { if (transformedNode != null) { yield return(transformedNode); } transformedNode = CreateNodeCopy(parentNode, node); transformedNode.Mesh = new MeshInstance(transformedMesh, transformedMaterials); } } transformedNode = transformedNode ?? CreateNodeCopy(parentNode, node); if (node.Camera != null) { transformedNode.Camera = Map(node.Camera); } if (node.Light != null) { transformedNode.Light = Map(node.Light); } yield return(transformedNode); }
private static NodeAsset CreateNodeCopy(NodeAsset parentNode, INodeAsset node) { NodeAsset transformedNode; transformedNode = new NodeAsset(node.Id); transformedNode.Transform.CopyFrom(node.Transform); transformedNode.Parent = parentNode; return(transformedNode); }
private void ApplyOnSubtree(NodeAsset transformedParent, INodeAsset node) { NodeAsset parent = null; foreach (var transformedNode in Apply(transformedParent, node)) { parent = transformedNode; } if (parent != null) { foreach (var childNode in node.ChildNodes) { ApplyOnSubtree(parent, childNode); } } }
private void TransformNode(WriterContext context, INodeAsset nodeAsset, Node node) { node.LocalMatrix = nodeAsset.Transform.Matrix; if (nodeAsset.Mesh != null) { Mesh mesh; if (!context.Meshes.TryGetValue(nodeAsset.Mesh.Mesh, out mesh)) { mesh = TransformMesh(context, nodeAsset.Mesh.Mesh, nodeAsset.Mesh.Materials); } node.Mesh = mesh; } foreach (var childNode in nodeAsset.ChildNodes) { TransformNode(context, childNode, node.CreateNode(childNode.Id)); } }
private void CreateNode(INodeAsset parentNode, INodeAsset node) { }