コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
                }
            }
        }
コード例 #4
0
        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));
            }
        }
コード例 #5
0
 private void CreateNode(INodeAsset parentNode, INodeAsset node)
 {
 }