そろそろ物体を動かしてみます。
一旦効率は無視。 時刻とともに ax.xxx() のアフィン変換のパラメータを変化出来るようにして、 時刻の更新ごとにデータをyamlファイルのロードからやりなおします。
元々yamlファイル中のax.xxx()箇所は全て文字列として扱っていて、 ロード後にeval()でアフィン変換のオブジェクトを生成してます。
ソースコード中のeval()の箇所で変数secの時刻を用意しておけば、 文字列中でsecを参照する式が利用できるはずです。 (ああ、インタープリタは便利)
さすがに、以前の静止したyamlファイルのデータを使うときに、 フレーム毎に同じデータをロードしなおすのも何なので、 安易にyamlファイル中に単語 sec が含まれているかどうかで判定するようにしておきます。
$ mv rt_v44 rt_v45 $ cat v45.patch | ( cd rt_v45 ; patch -p1 ) $ cd rt_v45 $ make clean $ make
では、いつもの速度確認。
$ ./cg.py eyep=[0,0,0],200,10 sec=10 data_name=objs name=out_v45/objs_1_2_sc n=1 init_sec=5 div=2 : wh : 76800/76800(100.0%) : fin 3.00s
以前の v43 wh : 76800/76800(100.0%) : fin 2.96s v42 wh : 76800/76800(100.0%) : fin 3.16s v39 wh : 76800/76800(100.0%) : fin 15.37s v38 wh : 76800/76800(100.0%) : fin 15.09s v37 wh : 76800/76800(100.0%) : fin 15.49s v36 wh : 76800/76800(100.0%) : fin 15.13s v35 wh : 76800/76800(100.0%) : fin 16.16s v34 wh : 76800/76800(100.0%) : fin 38.47s v32 wh : 76800/76800(100.0%) : fin 26.84s v31 wh : 76800/76800(100.0%) : fin 40.50s v30 wh : 76800/76800(100.0%) : fin 38.39s v29 wh : 76800/76800(100.0%) : fin 1m 44.72s v28 wh : 76800/76800(100.0%) : fin 1m 18.06s v27 wh : 76800/76800(100.0%) : fin 1m 8.39s v26 wh : 76800/76800(100.0%) : fin 1m 6.02s
追加したdat6.yaml
$ diff -u dat5.yaml dat6.yaml --- dat5.yaml 2018-06-04 04:58:05.000000000 +0900 +++ dat6.yaml 2018-06-04 23:11:09.000000000 +0900 @@ -1,7 +1,7 @@ pillar: - kind: cube rtd: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 } - m2g: [ ax.zoom_z(10) ] + m2g: [ 'ax.zoom_z( way.get([(10,2),(1,2)], sec, True) )' ] - kind: pipe rtd: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 } m2g: [ 'ax.zoom([2,2,1])', ax.slide_z(-11) ] @@ -28,7 +28,7 @@ - [ m2g, append, 16, [ ax.rot_z(360.0/16) ] ] - kind: pipe rtd: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 } - m2g: [ 'ax.zoom([24,24,1])', ax.slide_z(-13) ] + m2g: [ 'ax.zoom([24, way.get([(24,4),(1,4)], sec, True), 1])', ax.slide_z(-13) ] rxs: - [ m2g, append, 2, [ ax.slide_z(26) ] ] @@ -39,6 +39,7 @@ - [ m2g, append, 2, [ ax.zoom(16) ] ] - kind: ball rtd: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 } + l2m: [ 'ax.slide( way.liss([-3,-3,-3],[3,3,3],[3,4,5])(sec) )' ] m2g: [ ax.zoom_all(6) ] - kind: export export: big_ball
角柱の高さを2秒間隔で伸び縮み、 天井と床の円柱を4秒間隔でひしゃげさせて、 中央の球(6倍に拡大する前の半径1の段階)を(-3,-3,-3)から(3,3,3)の範囲を、 (3,4,5)秒の周期で適当にリサージュ図形の軌跡で移動させてみます。
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=dat6.yaml data_name=all name=out_v45/dat6_tst div=8 fps=8 : wh : 4800/4800(100.0%) : fin 1.11s frm : 160/160(100.0%) : fin 4m 57.65s estimated 19.84 hour at 640*480 30fps
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=dat6.yaml data_name=all name=out_v45/dat6 : wh : 291116/307200(94.8%) : total 1m 20.21s : rest 4.19s : 2018/06/05 20:15:31 wh : 307200/307200(100.0%) : fin 1m 16.05s frm : 600/600(100.0%) : fin 14h 7m 18.73s $ ls -lt out_v45/ | head -rw-r--r-- 1 kondoh staff 3047631 6 5 20:17 dat6_2.mp4 -rw-r--r-- 1 kondoh staff 3144862 6 5 20:17 dat6_1.mp4 -rw-r--r-- 1 kondoh staff 6587792 6 5 20:15 dat6.mp4
14時間ほどでした。 確かに、ねらい通り動いてます。