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 "