示例#1
0
        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);
            }
        }
示例#2
0
 public VMDReader()
 {
     InitializeBoneKeyFrameGroups();
     RawVMD = new VMD();
 }