3dto3dは、
Thomas Baierさんが作った3dファイルのコンバータです。
POV用のワイヤーフレームオブジェクトを作れます。
(円柱と球でできてます。) 3dto3dでワイヤーフレームのオブジェクトにコンバートする時の
注意点を書きます。(あまりないですが。)
まず、モデラーでオブジェクトを3dto3dに読み込める形式で保存します。
(dxf,raw,objなど)
次に、コマンドラインから
3dto3d hogehoge.dxf /if4 /of8 /or0.01 /oe0.0
などとします。 始めの/ifはinputファイルの形式です。4はdxfの意味です。
/ofはoutputファイルの形式です。ワイヤーフレームの場合は8にします。
/orはワイヤーフレームで使う円柱、球の半径です。
/oeは、良く分からないのですがこれを入れておかないとワイヤーフレームが
所々抜けてしまいます。ワイヤーフレームの場合は必ずこれを指定します。
そうすると、hogehoge.incというファイルができるので、
ふつうにPOVでレンダリングすればいいです。
…と思ったのですが、うまくいきませんでした。
円柱の指定は、
cylinder{座標,座標,半径}
となるはずですが、(始めの二つの座標で底面二つの中心を指定する。
半径は、円柱の半径。) なぜか、二つの座標が同じになっている円柱が沢山出てしまいます。
(これは元のファイルによる?それともバグ?)
ともかく、このままPOVに読み込むとエラーが出ます。
これをどうにかして取り除かなければなりません。
簡単なプログラムを書けば取り除けます。
僕は面倒なのでPerlで書きました。
##repair.pl ##perl repair.pl filename > newfile if(!open(IN, $ARGV[0])){ print("IREGAL!!\n"); exit(); } while($line = <IN>){ $temp = $line; $temp =~ s/\s//g; if($temp !~ /^cylinder\{([^\{\}]*)\}/){ print "$line"; next; } $temp = $1; ($a, $b) = split(/>,/, $temp); if($a eq $b){ print "//"; print "$line"; }else{ print "$line"; } } close(IN);
このスクリプトは、両底面の座標が全く同じになってしまっている
円柱をコメントアウトします。
perl repair.pl hoge.inc > newhoge.inc
とでもして使って下さい。Perlインタプリタは、Vector等で
簡単に手に入ります。
これでめでたく完璧なワイヤーフレームができます。