2007年12月3日月曜日

あーあ、俺も散弾銃のように歌い続けるかなぁ!!

World Tool Kit覚書

~ 3dsMaxで作った動きをWTK上でも再生しようぜ ~

1. 3dsMaxでてきとーにパス上を流れる動きを作成。

2. 書き出し -> ASCII形式を選択 -> なんかこのへんは忘れたけど精度6桁で出力

3. 出来た.ASEファイルを俺式コンバータ(後述)でWTK用の形式に変換

4. WTK上で動かすには「移動ノード」「モーションリンク」「パス」の三つを生成する必要がある。

4.1. 「パス」の生成。
WTpath *Path; /* パス */
WTgeometry *marker; /* マーカー用ジオメトリ */

path = WTpath_load("ファイル名.ASE",NULL);

/*** ついでにパス可視化 ***/
/* マーカー用box生成 -> パス可視化のためのマーカーセット -> マーカーを可視化 */
marker = WTgeometry_newblock(1.0,1.0,1.0,NULL);
WTpath_setmarker(Path,marker);
WTpath_setvisibility(Path,TRUE);

4.2. 「移動ノード」の生成

WTnode *Move; /* 移動ノード */
Move = WTmovnode_load(親ノード,"ファイル名.3DS",1.0);

4.3. 「モーションリンク」の生成

WTmotionlink *motion;
motion = WTmotionlink_new(Path,Move,WTSOURCE_PATH,WTTARGET_MOVABLE);

5. これで「移動ノード」->「モーションリンク」->「パス」の繋がりが完成したので、
   WTpath_play(Path)で動かせばいいじゃん。



[俺式コンバータ概要]
 3dsMaxから書き出したものは座標をPOSが入ってる文、回転をROTが入ってる文で記述してある。

ex)
 *CONTROL_POS_SAMPLE 0 -6.839744 7.298635 -16.181553
 *CONTROL_ROT_SAMPLE 160 -1.000000 0.000000 0.000000 0.000391

 POSはX,Y,Zの三元、ROTは4元数である。
 そんなこんなに気をつけて、SAMPLEのすぐ横の数字が同じPOSとROTを交互に配置すればいいじゃない。

ex)
POSI -6.839744 7.298635 -16.181553
ORIE -1.000000 0.000000 0.000000 0.000391

あとは……、一番頭になんか記述して、二行目に全部のPOSIとORIEの数を書くべし。
数値の間はタブから半角空白へ。POSIの後は半角スペース二つ。


とりあえずここまで。

追記 とんでもねー。このままじゃつかえねーよ。