Ejemplo n.º 1
0
        private static float[] GetBindMatrix(FBXTreeNode node, List <PoseNode> poseNodes)
        {
            var result = new float[]
            {
                1, 0, 0, 0,
                0, 1, 0, 0,
                0, 0, 1, 0,
                0, 0, 0, 1
            };

            var pose = poseNodes.Where(a => a.Id == node.Node.Id && a.IsBindPose).FirstOrDefault();

            // The bind pose is always a global matrix
            if (pose != null)
            {
                result = pose.Matrix;
            }

            /*var childNodes = node.Children.Where(a => a.Node.Name == "Model");
             *
             * foreach (var child in childNodes)
             *  result = GetBindMatrix(child, poseNodes).MatrixProduct(result);*/

            return(result);
        }
Ejemplo n.º 2
0
        public static Deformer FromTreeNode(FBXTreeNode node, List <PoseNode> poseNodes)
        {
            var deformer = new Deformer(node.Node);

            var model = node.Children.Where(a => a.Node.Name == "Model").FirstOrDefault();

            deformer.BindPoseMatrix = GetBindMatrix(model, poseNodes);

            deformer.BoneId = model.Node.Id.ToString();

            return(deformer);
        }
Ejemplo n.º 3
0
        public List <Deformer> GetClusters(FBXTreeNode geometryNode)
        {
            var deformer = geometryNode.Children.Where(a => a.Node.Name == "Deformer").FirstOrDefault();
            var clusters = new List <FBX.Deformer>();

            if (deformer != null)
            {
                var subdeformersTree = deformer.Children.Where(a => a.Node.Name == "Deformer");

                foreach (var tempNode in subdeformersTree)
                {
                    clusters.Add(FBX.Deformer.FromTreeNode(tempNode, PoseNodes));
                }
            }

            return(clusters);
        }
Ejemplo n.º 4
0
        public FBXTreeNode(FBXFileNode node, FBXFile file, FBXTreeNode parent = null)
        {
            Node = node;

            var nodeId = (Node != null) ? Node.Id : 0;

            var nodeConns = file.Connections.Where(a => a.Dst == nodeId);

            foreach (var con in nodeConns)
            {
                var childNode = file.FindChild(con.Src);

                if (childNode != null)
                {
                    Children.Add((new FBXTreeNode(childNode, file, this)));
                }
            }
        }