PMDViewerのライブラリ開発に関する個人的メモ
モーションコントローラは時間軸で制御されてて、再生状態では各時刻ごとにポーズパラメータを取り出し、ポーズコントローラに渡す。 ポーズコントローラは渡されたパラメータに従ってモデルの頂点を更新する。
2010-01-24 03:19:44モーションコントローラの時間軸制御はBetweenAS3でTweenを作って時刻ごとのフレーム番号を得るようになっているが、モーションコントローラ自体はTweenではない。
2010-01-24 03:23:07モーションコントローラはvmd読み込み時にキーフレームのパラメータから補間フレームのパラメータを計算して格納し、それ以降パラメータはリードオンリー。
2010-01-24 03:31:56モーションコントローラは並行して作用させることを考慮されていない。例えば表情変化だけのモーションと表情は動かさずに体を動かすだけのモーションを同時に適用するということはありそうだけど今は動作保証外。
2010-01-24 03:41:38時刻tでの動作の大雑把な説明としてはposePrams = Motion.getParams(t)で時刻tのポーズパラメータ取得、Pose.setParams(poseParams)でパラメータをポーズコントローラにセット、Pose.applyTp(Model)でポーズ適用。
2010-01-24 03:49:37複数のモーションを混ぜるならPose.setParams(Motion[i].getParams(t))のあとにPose.applyTo(Model)すれば一応なんとかなりそう。
2010-01-24 03:53:09BetweenAS3で自前のTweenクラスを作りたいときはAbstractTweenを継承してinternalUpdateをoverrideすればよいのかな?
2010-01-24 15:30:48tickerはBetweenAS3.asの_tickerが欲しいけどprivateで取れないからnew EnterFrameTickerで作る感じか?
2010-01-24 15:37:49BetweenAS3.tweenで生成されるのはObjectTweenでObjectTweenはAbstractTweenの派生だからtickerがとれるか。
2010-01-24 16:07:27ParallelTween.as見て思いついた。ポーズをリセットし続けるtween、VMDのモーションパラメータをセットするtween1、同tween2、…、ポーズを適用し続けるtweenの順番でParallelTweenを作れば目的の処理ができそう。
2010-01-25 01:11:05今はVMDControllerにもplay, stopを付けてるけどVMDControllerはモーション変更のデータコンテナというかビデオテープみたいな扱いにしてplay, stopはMikuMikuDanceクラスの方だけに付けるようにしたほうが良さそう。
2010-01-25 12:42:58ちなみに、ビデオテープという表現にしたのは再生終了位置を記録しているという意味と、MikuMikuDanceクラスが再生機でそれに入れないと再生できない扱いにするという意味を込めてる。
2010-01-25 12:46:17internal = BetweenAS3.tween(this, {frameNo:~},...);で一旦フレームベースのアニメを行う内部tweenを作って、
2010-01-25 12:51:42AbstractTweenの派生でinternalUpdateで実行する関数を設定できるFuncTweenってのを作って tween = new FuncTween((internal as IITween).ticker, 0, internal.duration)
2010-01-25 12:53:10tween.updateFunc = function (t:Number):void{resetParams();(internal as IITween).update(t);applyPose();} とすることでとりあえずもとの奴とほぼ同じ動作になった。
2010-01-25 12:55:12