コード例 #1
0
        private Grendgine_Collada_Node GetSkeletonFromVisualScene(Grendgine_Collada scene)
        {
            // We need to get the hierarchy of the bone structure.
            // DAE stores it in the visual scene, but sometimes it's hidden under layers of
            // other nodes. To get around that, we're going to check every node in the visual scene
            // for if A) it's a "JOINT" node and B) it has children, ie the node property isn't null.
            // The check will be recursive, working on every node in the hierarchy until we find what
            // *should* be the skeleton's root.

            Grendgine_Collada_Node root = null;

            foreach (Grendgine_Collada_Visual_Scene visScene in scene.Library_Visual_Scene.Visual_Scene)
            {
                foreach (Grendgine_Collada_Node node in visScene.Node)
                {
                    root = GetSkeletonFromNodeRecursive(node);

                    if (root != null)
                    {
                        break;
                    }
                }
            }

            return(root);
        }
コード例 #2
0
        public Bone(Grendgine_Collada_Node node)
        {
            Children          = new List <Bone>();
            InverseBindMatrix = Matrix4.Identity;
            Bounds            = new BoundingBox();

            Name     = node.Name;
            Unknown4 = 255;

            float[] nodeTransform = node.Matrix[0].Value();
            Matrix4 transform     = new Matrix4(nodeTransform[0], nodeTransform[1], nodeTransform[2], nodeTransform[3],
                                                nodeTransform[4], nodeTransform[5], nodeTransform[6], nodeTransform[7],
                                                nodeTransform[8], nodeTransform[9], nodeTransform[10], nodeTransform[11],
                                                nodeTransform[12], nodeTransform[13], nodeTransform[14], nodeTransform[15]);

            Scale       = transform.ExtractScale();
            Translation = new Vector3(transform.Column3[0], transform.Column3[1], transform.Column3[2]);
            Rotation    = transform.ExtractRotation();

            if (node.node == null)
            {
                return;
            }

            foreach (Grendgine_Collada_Node childNode in node.node)
            {
                Bone child = new Bone(childNode);
                Children.Add(child);
            }
        }
コード例 #3
0
ファイル: SkeletonData.cs プロジェクト: jellees/BMDCubed
        private Grendgine_Collada_Node GetSkeletonFromNodeRecursive(Grendgine_Collada_Node node)
        {
            Grendgine_Collada_Node skelRoot = null;

            if (node.Type == Grendgine_Collada_Node_Type.JOINT && node.node != null)
            {
                return(node);
            }
            else if (node.node != null)
            {
                foreach (Grendgine_Collada_Node child in node.node)
                {
                    skelRoot = GetSkeletonFromNodeRecursive(child);

                    if (skelRoot != null)
                    {
                        break;
                    }
                }
            }
            else if (node.Name.ToLower().Contains("root"))
            {
                skelRoot = node;
            }

            return(skelRoot);
        }
コード例 #4
0
ファイル: ColladaGenerator.cs プロジェクト: hamlertools/OTWB
        Grendgine_Collada_Node CreateNode(string name)
        {
            Grendgine_Collada_Node node = new Grendgine_Collada_Node();

            node.Name = name;
            node.Type = Grendgine_Collada_Node_Type.NODE;
            node.Instance_Geometry = new Grendgine_Collada_Instance_Geometry[1];
            Grendgine_Collada_Instance_Geometry geom = new Grendgine_Collada_Instance_Geometry();

            geom.URL                  = "#ID2";
            geom.Bind_Material        = new Grendgine_Collada_Bind_Material[1];
            geom.Bind_Material[0]     = CreateBindMaterial();
            node.Instance_Geometry[0] = geom;
            return(node);
        }
コード例 #5
0
ファイル: SkeletonData.cs プロジェクト: jellees/BMDCubed
        public SkeletonData(Grendgine_Collada scene, Grendgine_Collada_Skin skin)
        {
            FlatHierarchy     = new List <Bone>();
            BonesWithGeometry = new List <Bone>();

            boneNameList        = new List <string>();
            inverseBindMatrices = new List <Matrix4>();

            // Get the skeleton's root from the visual scene
            Grendgine_Collada_Node rootNode = GetSkeletonFromVisualScene(scene);

            // If a proper root was found, we create a new bone hierarchy from it
            if (rootNode != null)
            {
                SkeletonRoot = new Bone(rootNode);
                MakeDAESkeleton(skin);
            }
            // Otherwise, we create a root bone ourselves
            else
            {
                SkeletonRoot = new Bone();
                FlatHierarchy.Add(SkeletonRoot);
            }
        }