Name="off2pov"
Stich="off pov PoVray convert Konvertieren 3D Szenen"
Zeit="Sam Oct 5 17:29:04 MEST 2002"
Kurz="Sie haben die 3D-Beschreibungsdaten eines Objekts im off-Format, und
wollen diese mit PoVray rendern? Mit Perl kein Problem!"
Lang="
Für eine gute PoVray-Szene (sehr gute Einführung von Christian Perle:
Linux
Magazin 04/1998) brauchte ich unbedingt noch ein Dodekaeder, dessen Ecken,
Kanten und Flächen ich beliebieg ändern konnte.
Auf http://www.sct.gu.edu.au/~anthony/graphics/polyhedra/platonic/
fand ich eine off-Datei -- nur wie in meine PoVray-Szene integrieren?
Mein selbstgeschriebendes Programm in perl erledigt diese Aufgabe. Die Syntax
ist einfach:
`exCodes`
iblech@hubble:~/Povray > ./off2pov.pl < off-Datei > pov-Datei
`exCodee`
In der entstanden PoVray-Szenenbeschreibung muss dann nur noch der ganze Rest
(Kamera, Umgebung, ...) definiert werden.
Das Skript, Download:
`exCodes`
#!/usr/bin/perl -w
# off2pov - converts .off files to .pov-files
# Copyright (C) Ingo Blechschmidt Sam Okt 5 17:41:20 MEST 2002 - now,
# released under the Terms of the GNU General Public License.
`cat gpl.lic`
`cat add.lic`
#!/usr/bin/perl -w
\$radiS = "0.3";
\$radiC = "0.2";
\$pigS = "MyP";
\$pigC = "MyC";
\$pigF = "MyF";
\$finS = "FiP";
\$finC = "FiC";
\$finF = "FiF";
@points = ();
@rechts = ();
@verbs = ();
@Sat = ();
\$a = "";
\$i = 0;
\$a = <STDIN>;
chomp(\$a);
@Sat = split(" ", \$a);
for(\$i = 0; \$i < \$Sat[0]; \$i++) {
\$a = <STDIN>;
chomp(\$a);
\$points[\$i]=\$a;
}
for(\$i = 0; \$i < \$Sat[1]; \$i++) {
\$a = <STDIN>;
chomp(\$a);
\$rechts[\$i]=\$a;
}
for(\$i = 0; \$i < \$Sat[2]; \$i++) {
\$a = <STDIN>;
chomp(\$a);
\$verbs[\$i]=\$a;
}
for(\$i = 0; \$i < \$Sat[0]; \$i++) {
print "sphere { <";
print \`echo \$points[\$i] | sed -e 's+^ *++' -e 's+ *\\$++' | tr -s ' ' | tr ' ' ',' | tr -d '\n'\`;
print ">, rad pigment { \$pigS } finish { \$finS } }\n";
}
for(\$i = 0; \$i < \$Sat[1]; \$i++) {
@R = split(" ", \$rechts[\$i]);
print "polygon { " . int(\$R[0] + 1) . " ";
for(\$j = 1; \$j <= \$R[0]; \$j++) {
print "<" . \`echo \$points[\$R[\$j]] | sed -e 's+^ *++' -e 's+ *\\$++' | tr -s ' ' | tr ' ' ',' | tr -d '\n' \` . ">, ";
}
print "<" . \`echo \$points[\$R[1]] | sed -e 's+^ *++' -e 's+ *\\$++' | tr -s ' ' | tr ' ' ',' | tr -d '\n' \` . "> pigment { \$pigF } finish { \$finF } }\n";
}
for(\$i = 0; \$i < \$Sat[2]; \$i++) {
@R = split(" ", \$verbs[\$i]);
print "cylinder { <";
print \`echo \$points[\$R[0]] | sed -e 's+^ *++' -e 's+ *\\$++' | tr -s ' ' | tr ' ' ',' | tr -d '\n'\`;
print ">, <";
print \`echo \$points[\$R[1]] | sed -e 's+^ *++' -e 's+ *\\$++' | tr -s ' ' | tr ' ' ',' | tr -d '\n'\`;
print ">, cad pigment { \$pigC } finish { \$finC } }\n";
}
`exCodee`
Viel Spaß beim Rendern!
"
case $1 in
Name) echo $Name; exit;;
Stich) echo $Stich; exit;;
Zeit) echo $Zeit; exit;;
Kurz) echo $Kurz; exit;;
Lang) echo $Lang; exit;;
esac
# if [ "$1" = "Name" ]; then echo $Name; fi
mself_vA="txt/0044.txt txt/0054.txt "