// Start is called before the first frame update void Start() { BVHParser parser = new BVHParser(); data = parser.Parse(BVHFile); CreateJoint(data.rootJoint, Vector3.zero); }
// 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; }
// 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); } }
// 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); } }
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; }
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(); } }
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 != '}'); }