Ejemplo n.º 1
0
    // Start is called before the first frame update
    void Start()
    {
        BVHParser parser = new BVHParser();

        data = parser.Parse(BVHFile);
        CreateJoint(data.rootJoint, Vector3.zero);
    }
Ejemplo n.º 2
0
    // This function doesn't call any Unity API functions and should be safe to call from another thread
    public void parseFile()
    {
        string bvhData = File.ReadAllText(filename);

        bp        = new BVHParser(bvhData);
        frameRate = 1f / bp.frameTime;
    }
Ejemplo n.º 3
0
 // This function doesn't call any Unity API functions and should be safe to call from another thread
 public void parse(string bvhData)
 {
     if (respectBVHTime)
     {
         bp        = new BVHParser(bvhData);
         frameRate = 1f / bp.frameTime;
     }
     else
     {
         bp = new BVHParser(bvhData, 1f / frameRate);
     }
 }
Ejemplo n.º 4
0
 // This function doesn't call any Unity API functions and should be safe to call from another thread
 public void parse(string bvhData)
 {
     if (respectBVHTime)
     {
         bp        = new BVHParser(bvhData);
         frameTime = bp.frameTime * 1000f;
     }
     else
     {
         bp = new BVHParser(bvhData, frameTime);
     }
 }
Ejemplo n.º 5
0
    public void createFromBVH(BVHParser parser)
    {
        minpos = 0;
        maxpos = 0;
        size   = 0;

        BVHParser.BVHBone currBone = parser.root;
        rootObj      = new GameObject();
        rootObj.name = currBone.name;
        rootObj.transform.localPosition = new Vector3(-currBone.offsetX, currBone.offsetY, currBone.offsetZ);

        transforms.Add(rootObj.transform);

        foreach (BVHParser.BVHBone currChildBone in currBone.children)
        {
            iterateChildBone(currChildBone, rootObj);
        }

        size = maxpos - minpos;
    }
Ejemplo n.º 6
0
    public void loadFromFile(string filename)
    {
        bvhParser = new BVHParser(File.ReadAllText(filename));

        SkeletonConverter converter = new SkeletonConverter();

        converter.createFromBVH(bvhParser);
        this.size = converter.size;
        root      = converter.rootObj.transform;
        foreach (Transform child in this.transform)
        {
            UnityEngine.Object.DestroyImmediate(child.gameObject);
        }
        root.parent = this.transform;

        UnityEngine.Animations.Rigging.BoneRenderer myBoneRenderer = this.GetComponent <UnityEngine.Animations.Rigging.BoneRenderer>();
        if (converter != null && converter.rootObj != null && myBoneRenderer != null)
        {
            myBoneRenderer.transforms = converter.transforms.ToArray();
        }
    }
Ejemplo n.º 7
0
        public BVHBone(BVHParser parser, bool rootBone)
        {
            bp = parser;
            bp.boneList.Add(this);
            channels     = new BVHChannel[6];
            channelOrder = new int[6] {
                0, 1, 2, 5, 3, 4
            };
            children = new List <BVHBone>();

            bp.skip();
            if (rootBone)
            {
                bp.assureExpect("ROOT");
            }
            else
            {
                bp.assureExpect("JOINT");
            }
            bp.assure("joint name", bp.getString(out name));
            bp.skip();
            bp.assureExpect("{");
            bp.skip();
            bp.assureExpect("OFFSET");
            bp.skip();
            bp.assure("offset X", bp.getFloat(out offsetX));
            bp.skip();
            bp.assure("offset Y", bp.getFloat(out offsetY));
            bp.skip();
            bp.assure("offset Z", bp.getFloat(out offsetZ));
            bp.skip();
            bp.assureExpect("CHANNELS");

            bp.skip();
            bp.assure("channel number", bp.getInt(out channelNumber));
            bp.assure("valid channel number", channelNumber >= 1 && channelNumber <= 6);

            for (int i = 0; i < channelNumber; i++)
            {
                bp.skip();
                int channelId;
                bp.assure("channel ID", bp.getChannel(out channelId));
                channelOrder[i]             = channelId;
                channels[channelId].enabled = true;
            }

            char peek = ' ';

            do
            {
                float ignored;
                bp.skip();
                bp.assure("child joint", bp.peek(out peek));
                switch (peek)
                {
                case 'J':
                    BVHBone child = new BVHBone(bp, false);
                    children.Add(child);
                    break;

                case 'E':
                    bp.assureExpect("End Site");
                    bp.skip();
                    bp.assureExpect("{");
                    bp.skip();
                    bp.assureExpect("OFFSET");
                    bp.skip();
                    bp.assure("end site offset X", bp.getFloat(out ignored));
                    bp.skip();
                    bp.assure("end site offset Y", bp.getFloat(out ignored));
                    bp.skip();
                    bp.assure("end site offset Z", bp.getFloat(out ignored));
                    bp.skip();
                    bp.assureExpect("}");
                    break;

                case '}':
                    bp.assureExpect("}");
                    break;

                default:
                    bp.assure("child joint", false);
                    break;
                }
            } while (peek != '}');
        }