3次元レンダリング
- Gnuconvf -
Q:光照らされた滑らかなレンダリング像は描けますか?
A:直接にはpm3dの色数と面数を増やす他ありません.外部コマンドとして,
簡易ポリゴンプロセッサー(SImple Polygon
Processor)
sipp3.1(現在,anonymous では接続できないようです)
を用いた変換ツールgnuconvに筆者が手を加えたgnuconvfを使う例を示します.
以下に例を示します.
-
出力できるイメージの種類には,PHONE シェーディング,
FLAT シェーディング,LINEフレーム です.
set samples 36
set isosample 36,36
set hidden3d
set ticslevel 0
splot sin(x)*sin(y)/x/y
set term table
set output "3dsurf.table"
replot
!gnuconvf -s 200 -i 3dsurf.table -o 3dsurf_p.ppm
!display ./3dsurf_p.ppm
!gnuconvf -s 200 -i 3dsurf.table -o 3dsurf_f.ppm -f
!display ./3dsurf_f.ppm
!gnuconvf -s 200 -i 3dsurf.table -o 3dsurf_l.ppm -l
!display ./3dsurf_l.ppm
- 鎖のように継った2つのトーラスです.
set hidden3d; set ticslevel 0; set parametric
set isosamples 28,14
set urange [0:2*pi]; set vrange [-pi:pi]
set size 0.8,1; set view 60,20,1,1
set ticslevel 0
splot cos(u)+.5*cos(u)*cos(v),sin(u)+.5*sin(u)*cos(v),.5*sin(v), \
1+cos(u)+.5*cos(u)*cos(v), .5*sin(v), sin(u)+.5*sin(u)*cos(v)
set term table
set out "tori.table"
replot
!gnuconvf -s 200 -i tori.table -o tori.ppm -r 0.85 -X50 -Y-100 -Z50
!convert -transparent black tori.ppm tori.jpg
- 有名な巻き貝です.
set hidden3d; set ticslevel 0
set parametric; set samples 30; set isosamples 30,30
set ticslevel 0; set size 0.7,1
set urange[0:3.1*pi]; set vrange[-pi:pi]
x(u,v)=u*(1+0.5*cos(v))*cos(u)
y(u,v)=0.5*u*sin(v)
z(u,v)=-u*(1+0.5*cos(v))*sin(u)
splot x(u,v),y(u,v),z(u,v)
set term table; set out "3dsurf.table"
replot
!gnuconvf -s 200 -i 3dsurf.table -o 3dsurf7.ppm -c0.7,0.6,0.2
!ppmchange black cadetblue 3dsurf7.ppm > shell.ppm
!convert shell.ppm shell.jpg
- 円筒も無理やりですが描けます.
set parametric; set hidden3d
set vrange[0:2*pi]
set isosamples 31,31;set ticslevel 0
a=1.0; b=4.0; u0=atan(a/b)
set urange[0:u0*3]
r(u)= u < u0 ? b*tan(u) : a
x(u,v) = r(u)*cos(v)
y(u,v) = r(u)*sin(v)
z(u) = u < u0 ? b : a/tan(u)
splot x(u,v),y(u,v),z(u)
set term table
set out "cylinder1.table"
replot
!gnuconvf -i cylinder1.table -o cylinder1_cnv.ppm -F -X80 -Y-80\
-c0.0,0.7,0.7 -g -s 200
!convert cylinder1_cnv.ppm cylinder1_cnv.jpeg
!display cylinder1_cnv.jpeg