private static void AddMorphTarget(DRSceneNodeContent sceneNode, MeshContent morphTarget)
        {
            var meshNode = sceneNode as DRMeshNodeContent;
              if (meshNode == null)
              {
            string message = String.Format(
              CultureInfo.InvariantCulture,
              "Morph target \"{0}\" needs to be a child of the base mesh.",
              morphTarget.Name);
            throw new InvalidContentException(message, morphTarget.Identity);
              }

              if (meshNode.InputMorphTargets == null)
            meshNode.InputMorphTargets = new List<MeshContent>();

              meshNode.InputMorphTargets.Add(morphTarget);
        }
Exemple #2
0
        private static void AddMorphTarget(DRSceneNodeContent sceneNode, MeshContent morphTarget)
        {
            var meshNode = sceneNode as DRMeshNodeContent;

            if (meshNode == null)
            {
                string message = String.Format(
                    CultureInfo.InvariantCulture,
                    "Morph target \"{0}\" needs to be a child of the base mesh.",
                    morphTarget.Name);
                throw new InvalidContentException(message, morphTarget.Identity);
            }

            if (meshNode.InputMorphTargets == null)
            {
                meshNode.InputMorphTargets = new List <MeshContent>();
            }

            meshNode.InputMorphTargets.Add(morphTarget);
        }
            public int Compare(DRSceneNodeContent x, DRSceneNodeContent y)
            {
                if (x.LodDistance < y.LodDistance)
                {
                    return(-1);
                }
                if (x.LodDistance > y.LodDistance)
                {
                    return(+1);
                }
                if (x.LodLevel < y.LodLevel)
                {
                    return(-1);
                }
                if (x.LodLevel > y.LodLevel)
                {
                    return(+1);
                }

                return(0);
            }
        private static DRSceneNodeContent BuildSceneGraph(NodeContent node, DRSceneNodeContent parent)
        {
            CheckForCyclicReferences(node);

            DRSceneNodeContent sceneNode;

            if (node is BoneContent)
            {
                // ----- BoneContent
                // Bones do not show up in the scene graph.
                sceneNode = null;
            }
            else if (node is MeshContent)
            {
                // ----- MeshContent
                var    mesh = (MeshContent)node;
                string morphTargetName;
                if (ContentHelper.IsMorphTarget(mesh, out morphTargetName))
                {
                    // ----- Morph Targets
                    // Morph targets are stored in the parent mesh, they do not show up in
                    // the scene graph. Children of morph targets are ignored!
                    mesh.Name = morphTargetName;
                    AddMorphTarget(parent, mesh);
                    sceneNode = null;
                }
                else if (ContentHelper.IsOccluder(mesh))
                {
                    // ----- OccluderNode
                    sceneNode = new DROccluderNodeContent {
                        InputMesh = mesh
                    };
                }
                else
                {
                    // ----- MeshNode
                    sceneNode = new DRMeshNodeContent {
                        InputMesh = mesh
                    };
                }
            }
            else
            {
                // ----- Empty/unsupported node
                sceneNode = new DRSceneNodeContent();
            }

            if (sceneNode != null)
            {
                sceneNode.Name = node.Name;
                Pose     pose;
                Vector3F scale;
                DecomposeTransform(node, out pose, out scale);
                sceneNode.PoseLocal  = pose;
                sceneNode.ScaleLocal = scale;
                if (node.Children.Count > 0)
                {
                    // Process children.
                    sceneNode.Children = new List <DRSceneNodeContent>();

                    // Recursively add children.
                    foreach (var childNode in node.Children)
                    {
                        var childSceneNode = BuildSceneGraph(childNode, sceneNode);
                        if (childSceneNode != null)
                        {
                            childSceneNode.Parent = sceneNode;
                            sceneNode.Children.Add(childSceneNode);
                        }
                    }
                }
            }

            return(sceneNode);
        }
        private static DRSceneNodeContent BuildSceneGraph(NodeContent node, DRSceneNodeContent parent)
        {
            CheckForCyclicReferences(node);

              DRSceneNodeContent sceneNode;
              if (node is BoneContent)
              {
            // ----- BoneContent
            // Bones do not show up in the scene graph.
            sceneNode = null;
              }
              else if (node is MeshContent)
              {
            // ----- MeshContent
            var mesh = (MeshContent)node;
            string morphTargetName;
            if (ContentHelper.IsMorphTarget(mesh, out morphTargetName))
            {
              // ----- Morph Targets
              // Morph targets are stored in the parent mesh, they do not show up in
              // the scene graph. Children of morph targets are ignored!
              mesh.Name = morphTargetName;
              AddMorphTarget(parent, mesh);
              sceneNode = null;
            }
            else if (ContentHelper.IsOccluder(mesh))
            {
              // ----- OccluderNode
              sceneNode = new DROccluderNodeContent { InputMesh = mesh };
            }
            else
            {
              // ----- MeshNode
              sceneNode = new DRMeshNodeContent { InputMesh = mesh };
            }
              }
              else
              {
            // ----- Empty/unsupported node
            sceneNode = new DRSceneNodeContent();
              }

              if (sceneNode != null)
              {
            sceneNode.Name = node.Name;
            Pose pose;
            Vector3F scale;
            DecomposeTransform(node, out pose, out scale);
            sceneNode.PoseLocal = pose;
            sceneNode.ScaleLocal = scale;
            if (node.Children.Count > 0)
            {
              // Process children.
              sceneNode.Children = new List<DRSceneNodeContent>();

              // Recursively add children.
              foreach (var childNode in node.Children)
              {
            var childSceneNode = BuildSceneGraph(childNode, sceneNode);
            if (childSceneNode != null)
            {
              childSceneNode.Parent = sceneNode;
              sceneNode.Children.Add(childSceneNode);
            }
              }
            }
              }

              return sceneNode;
        }