public void ReadVMD(string filePath) { RawVMD = new VMD(filePath); //人ボーンのキーフレームをグループごとに分けてBoneKeyFrameGroupsに入れる foreach (VMD.BoneKeyFrame boneKeyFrame in RawVMD.BoneKeyFrames) { if (!BoneKeyFrameGroup.StringBoneNames.Contains(boneKeyFrame.Name)) { continue; } BoneKeyFrameGroups[BoneKeyFrameGroup.StringBoneNames.IndexOf(boneKeyFrame.Name)].AddKeyFrame(boneKeyFrame); } //いちおうフレームごとに並べておく BoneKeyFrameGroups.ForEach(x => x.OrderByFrame()); //人ボーンのフレームが見当たらなかったらこれ以上しない if (BoneKeyFrameGroups.All(x => x.BoneKeyFrames.Count == 0)) { return; } //ついでに最終フレームも求めておく FrameCount = BoneKeyFrameGroups.Where(x => x.BoneKeyFrames.Count > 0).Max(x => x.BoneKeyFrames.Last().FrameNumber); //全表情ボーンをフレームごとに並び替えておく RawVMD.FaceKeyFrames.OrderBy(x => x.FrameNumber); //表情ボーンのキーフレームをグループごとに分けてFaceKeyFrameGroupsに入れる foreach (VMD.FaceKeyFrame faceKeyFrame in RawVMD.FaceKeyFrames) { string morphName = faceKeyFrame.MorphName; if (morphName == null) { continue; } if (!FaceKeyFrameGroups.Keys.Contains(morphName)) { FaceKeyFrameGroups.Add(morphName, new FaceKeyFrameGroup(faceKeyFrame.MorphName)); } FaceKeyFrameGroups[morphName].FaceKeyFrames.Add(faceKeyFrame); } }
public VMDReader() { InitializeBoneKeyFrameGroups(); RawVMD = new VMD(); }