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等で
簡単に手に入ります。
これでめでたく完璧なワイヤーフレームができます。