Exemplo n.º 1
0
        private static DancePose createPoseFromBvhPose(BvhNode skeleton, double[] bvhPose, string[] bones)
        {
            Dictionary <string, BoneState> items = new Dictionary <string, BoneState>();
            int num = 0;

            foreach (BvhNode current in skeleton.GetAllNodesRecursively())
            {
                Angle         x        = Angle.Deg000;
                Angle         y        = Angle.Deg000;
                Angle         z        = Angle.Deg000;
                BvhChannels[] channels = current.Channels;
                for (int i = 0; i < channels.Length; i++)
                {
                    switch (channels[i])
                    {
                    case BvhChannels.Xrotation:
                        x = -Angle.FromDegree(bvhPose[num]);
                        break;

                    case BvhChannels.Yrotation:
                        y = -Angle.FromDegree(bvhPose[num]);
                        break;

                    case BvhChannels.Zrotation:
                        z = Angle.FromDegree(bvhPose[num]);
                        break;
                    }
                    num++;
                }
                BoneState value = new BoneState(x, y, z);
                if (current.Name.Equals("Hips"))
                {
                    value.Rotate = new CtQuaternion(new CtVector3D(0f, 1f, 0f), 3.1415926535897931) * value.Rotate;
                }
                items[current.Name] = value;
            }
            return(new DancePose(bones, Array.ConvertAll <string, BoneState>(bones, delegate(string name)
            {
                if (!items.ContainsKey(name))
                {
                    return BoneState.Zero;
                }
                return items[name];
            })));
        }
Exemplo n.º 2
0
        public static BvhMotion Import(TextReader reader)
        {
            BvhNode root = null;

            if (reader.ReadLine().Trim() == "HIERARCHY")
            {
                string[] array = reader.ReadLine().Trim().Split(new char[]
                {
                    ' ',
                    '\t'
                }, StringSplitOptions.RemoveEmptyEntries);
                if (array[0] == "ROOT")
                {
                    root = BvhFormat.ReadNode(array[1], reader);
                }
            }
            if (reader.ReadLine().Trim() == "MOTION")
            {
                int num = int.Parse(reader.ReadLine().Split(new char[]
                {
                    ':'
                })[1].Trim());
                double spf = double.Parse(reader.ReadLine().Split(new char[]
                {
                    ':'
                })[1].Trim());
                double[][] array2 = new double[num][];
                for (int i = 0; i < array2.Length; i++)
                {
                    array2[i] = (
                        from token in reader.ReadLine().Split(new char[]
                    {
                        ' ',
                        '\t'
                    }, StringSplitOptions.RemoveEmptyEntries)
                        select double.Parse(token)).ToArray <double>();
                }
                return(new BvhMotion(root, spf, array2));
            }
            return(null);
        }
Exemplo n.º 3
0
 public BvhMotion(BvhNode root, double spf, double[][] poses)
 {
     this.RootNode        = root;
     this.SecondsPerFrame = spf;
     this._poses          = poses;
 }