Exemplo n.º 1
0
 private void _読み込む(Stream fs)
 {
     this.ヘッダ        = new ヘッダ(fs);
     this.ボーンフレームリスト = new ボーンフレームリスト(fs);
     this.モーフフレームリスト = new モーフフレームリスト(fs);
     this.カメラフレームリスト = new カメラフレームリスト(fs);
     this.照明フレームリスト  = new 照明フレームリスト(fs);
     //this.セルフ影リスト = new セルフ影リスト( fs );
     //this.モデル表示_IKリスト = new モデル表示_IKリスト( fs );
 }
        /// <summary>
        ///     VMDのボーンフレームリストからアニメ変数を構築する。
        /// </summary>
        /// <param name="VMDFカメラフレームリスト">入力となるカメラフレームリスト。</param>
        /// <param name="カメラ">対象となるカメラ。</param>
        public static void カメラモーションを追加する(VMDFormat.カメラフレームリスト VMDFカメラフレームリスト, モーションカメラMMD カメラ)
        {
            var cameraFrames = VMDFカメラフレームリスト
                               .OrderBy((frame) => frame.フレーム番号); // フレーム番号昇順に。

            uint 前のフレーム番号 = 0;

            foreach (var frame in cameraFrames)
            {
                var 持続時間sec = (frame.フレーム番号 - 前のフレーム番号) / 30.0;     // 1frame = 1/30sec

                カメラ.アニメ変数.注視点からの距離.遷移を追加する(new ベジェ実数アニメ遷移(frame.距離, 持続時間sec, frame.ベジェ曲線[4]));
                カメラ.アニメ変数.注視点の位置.遷移を追加する(new ベジェ移動アニメ遷移(frame.位置, 持続時間sec, frame.ベジェ曲線[0], frame.ベジェ曲線[1], frame.ベジェ曲線[2]));
                カメラ.アニメ変数.回転rad.遷移を追加する(new ベジェ移動アニメ遷移(frame.回転, 持続時間sec, frame.ベジェ曲線[3], frame.ベジェ曲線[3], frame.ベジェ曲線[3]));
                カメラ.アニメ変数.視野角deg.遷移を追加する(new ベジェ実数アニメ遷移(frame.視野角, 持続時間sec, frame.ベジェ曲線[5]));
                // todo: VMDカメラモーションのパースペクティブには未対応

                前のフレーム番号 = frame.フレーム番号;
            }
        }