を試してみると、再びv49のときの変な表示に。
v50.patch で、とりあえず平面系を対応して、よしよしとなって
v51.patch で、円柱や円すいの側面の場合も対応したつもりでしたが、、、 ここで、円柱と円すいのデータ op2.yaml で試してて、 なんか、以前とどこが変わったか良く判りませんねーってなって、 そのままでした。
今、v51の状態に戻してみて改めて op3.yaml の角柱と角すいのデータを試してみると、 この時点でv49のダメな表示にデグレしてました。
v51.patch をひもといてみると、、、
--- rt_v50/cross.c 2018-06-11 23:11:26.000000000 +0900 +++ rt_v51/cross.c 2018-06-14 01:04:12.000000000 +0900 : @@ -352,15 +353,24 @@ break; } - if(is_plane(kind_idx)){ - struct line x, y;; - lstx_tr_line(l2g, L2G, &line_x1, &x); - lstx_tr_line(l2g, L2G, &line_y1, &y); - cross_product_unit(x.v, y.v, ret->l_nv_g.v); - lstx_tr_p(l2g, L2G, ret->p, ret->l_nv_g.p); - }else{ - line_new(&l_nv, ret->p, nv); - lstx_tr_line(l2g, L2G, &l_nv, &ret->l_nv_g); + line_new(&l_nv, ret->p, nv); + lstx_tr_line(l2g, L2G, &l_nv, &ret->l_nv_g); + if(kind_idx != KIND_BALL){ + double *p = ret->l_nv_g.p; + double *v = ret->l_nv_g.v; + double z[3]; + struct vecs vs; + + if(is_plane(kind_idx)){ + v_set(z, v_x1); + }else if(kind_idx == KIND_PIPE_SIDE){ + v_add(p, v_z1, z); + }else{ /* KIND_CONE_SIDE */ + v_set(z, v_z1); + } + lstx_tr_p(l2g, L2G, z, z); + v_sub(z, p, z); + vecs_by_fix_ref(&vs, 'z', z, 'y', v); } if(rev){
ローカル変数 vs に、せっせと直行する3つのベクトルの座標系をこしらえておきながら、 力尽きたのか、そのままローカル変数 vs のスコープから外れてます。
しかもパッチの末尾
: diff -urN rt_v50/vecs.c rt_v51/vecs.c --- rt_v50/vecs.c 2018-04-13 20:24:38.000000000 +0900 +++ rt_v51/vecs.c 2018-06-14 01:15:00.000000000 +0900 @@ -235,4 +235,12 @@ vecs_init(vs); } +double * +vecs_get_by_name(struct vecs *vs, char name) +{ + /* name: 'x', 'y' or 'z' */ + int i = name - 'x'; + return &VECS_ACC(vs, i, 0); +} + /* EOF */ diff -urN rt_v50/vecs.h rt_v51/vecs.h --- rt_v50/vecs.h 2018-04-29 17:18:38.000000000 +0900 +++ rt_v51/vecs.h 2018-06-14 01:15:00.000000000 +0900 @@ -40,5 +40,6 @@ void vecs_by_fix_ref(struct vecs *vs, char fix_nm, double *fix, char ref_nm, double *ref); void vecs_rot_y(struct vecs *vs, double deg); +double *vecs_get_by_name(struct vecs *vs, char name); #endif
ローカル変数の vs から、判り易く目的のベクトルを取り出せるように関数を追加までしたのに、 この追加した関数はここまで、どこにも使われてませんでした。 残念ー。
cross.c cross_get_nv() : vecs_by_fix_ref(&vs, 'z', z, 'y', v); v_set( v, vecs_get_by_name(&vs, 'y') ); /* これ */ } :
遅ればせながら追加してパッチに含めておきます。
にしても、op3.yaml の角柱、角すい、op2.yaml の円柱、円すい。 試してみると気泡が目立ちます。こんなに出てたのだろうか?
少なくともv51のときのop2.yamlの画像では、無かったはず。 ちょっとv58で1コマだけ生成してみます。
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v58/op2ck n=1
まずv58
そして以前のv51
明らかにv58は気泡が増えてますな。
また見ていくとして、、、
とりあえず、まぁv51以降は法線の算出結果を最後にセットするのを忘れてたので、その確認を。
op2.yaml, op3.yamlで試してみると、ダメです。 角すいが、ちゃんと表示されてませんし、 明らかに反射で映り込む動画の画像が、歪みまくっていて法線があちこち向いてます。
(これはこれで、芸術的な画像かも)
cross.c cross_get_nv() のball以外の法線の箇所、見直してみるとかなり間違ってました。 修正しておきます。
今回はこれで一旦これでパッチを作成します。
$ mv rt_v58 rt_v59 $ cat v59.patch | ( cd rt_v59 ; patch -p1 ) $ cd rt_v59 $ make clean $ make
まずは角すいの表示の確認。
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op3.yaml data_name=all name=out_v59/op3_tst fps=1 : wh : 307200/307200(100.0%) : fin 39.27s frm : 20/20(100.0%) : fin 12m 4.64s estimated 6.04 hour at 640*480 30fps
op2.yaml も同様に。
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v59/op2_tst fps=1 : wh : 307200/307200(100.0%) : fin 15.55s frm : 20/20(100.0%) : fin 4m 57.32s estimated 2.48 hour at 640*480 30fps
こちらは物体数が少ないので、計算時間は短いですね。
気泡が気になりますが、とりあえず「平面系」の法線が正しくなって、角すいの「形状」はv50レベルに戻りました。
それではリテイク
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op3.yaml data_name=all name=out_v59/op3 : wh : 307200/307200(100.0%) : fin 20.66s frm : 600/600(100.0%) : fin 5h 50m 36.83s $ ls -lt out_v59/ | head -rw-r--r-- 1 kondoh staff 2936307 7 6 10:20 op3_2.mp4 -rw-r--r-- 1 kondoh staff 3136221 7 6 10:20 op3_1.mp4 -rw-r--r-- 1 kondoh staff 6446809 7 6 10:18 op3.mp4 :
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op2.yaml data_name=all name=out_v59/op2 : wh : 307200/307200(100.0%) : fin 9.93s frm : 600/600(100.0%) : fin 2h 20m 5.13s $ ls -lt out_v59/ | head -rw-r--r-- 1 kondoh staff 2571436 7 6 23:28 op2_2.mp4 -rw-r--r-- 1 kondoh staff 3139436 7 6 23:28 op2_1.mp4 -rw-r--r-- 1 kondoh staff 6080015 7 6 23:26 op2.mp4 :
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=op.yaml data_name=all name=out_v59/op : wh : 307200/307200(100.0%) : fin 21.65s frm : 600/600(100.0%) : fin 5h 9m 35.58s $ ls -lt out_v59/ | head -rw-r--r-- 1 kondoh staff 2959806 7 7 05:03 op_3.mp4 -rw-r--r-- 1 kondoh staff 3136246 7 7 05:03 op_2.mp4 -rw-r--r-- 1 kondoh staff 3129803 7 7 05:02 op_1.mp4 -rw-r--r-- 1 kondoh staff 10165325 7 7 05:00 op.mp4 :
$ ./cg.py eyep=[0,0,0],[300,300,100],10 sec=20 yaml=and.yaml data_name=all name=out_v59/and : wh : 307200/307200(100.0%) : fin 14.23s frm : 600/600(100.0%) : fin 3h 9m 42.58s $ ls -lt out_v59/ | head -rw-r--r-- 1 kondoh staff 2599890 7 7 14:30 and_3.mp4 -rw-r--r-- 1 kondoh staff 3137690 7 7 14:30 and_2.mp4 -rw-r--r-- 1 kondoh staff 3132393 7 7 14:28 and_1.mp4 -rw-r--r-- 1 kondoh staff 9716157 7 7 14:27 and.mp4 :