4. Lego on the hard way

Das war die (alte) Seite von Anton Raves. Mittlerweile gibt es sie nicht mehr.
Anton Raves' LEGO-Dateien beziehen sich auf die älteren digitalen LEGO-Modelle, die von dem LEGO-Fan Anton Raves in den 1990er Jahren erstellt wurden. Seine Arbeit war eine der ersten, die LEGO-Modelle mit Hilfe von Computergrafiken und Programmiersprachen wie POV-Ray darstellte.
Seine Dateien wurden typischerweise im Zusammenhang mit Raytracing-Software, insbesondere POV-Ray, erstellt. Dabei handelt es sich um eine deklarative Szenebeschreibungsdatei, in der die genaue Position, Ausrichtung und das Aussehen jedes LEGO-Steins definiert sind.
Es gibt auch die Möglichkeit, die unterschiedlichen Lego-Steine mit Hilfe von Include-Dateien anzusprechen und durch scale, translate und rotate an die entsprechenden Stellen für ein Lego-Objekt zu bringen. Dieses erfordert sehr viel Arbeit und Ausdauer, da man nicht nur wissen muss, mit welchem Namen die einzelnen Lego-Steine aufzurufen sind. Weiterhin ist es nämlich nicht immer einfach, mit translate und rotate die Steine zu verschieben bzw. zu drehen.

Man benötigt für diese Art der Programmierung in PovRay zwei Libraries. Dieses sind:
1. 541-Library - 327 kB
2. Bilder der Legoteile mit Namen - 14,9 MB
Diese Bilder der Legoteile sind auch in folgender PDF-Datei zusammengefasst. Diese kann hier heruntergeladen werden:
Alle Legoteile als LEGO-Datei - 7,2 MB
Wenn man die Datei 539_reference_images.zip entzipped, erhält man ein Verzeichnis mit allen Legosteinen als Bild und deren Namen als JPG-Datei (siehe Bild rechts).

So erstellt man ein Lego-Objekt:
1. Die entsprechenden Legosteine müssen mit Hilfe der Bilddateien gefunden werden (Der Name der JPG-Datei ist gleichzeitig der Legostein-Name).
2. Der Legostein muss entsprechend skaliert werden, z.B. scale<0.1,0.1,0.1>
3. Mit Hilfe von translate und rotate muss der entsprechende Legostein an die richtige Stelle gebracht werden.
Bei größeren Lego-Objekten kann die Anzahl der Steine naturgemäß schon recht groß werden.
Hier soll an einem Beispiel die Vorgehensweise beim Erstellen eines Objekts mit Legosteinen in PovRAY gezeigt werden. Beim Objekt handelt es sich um die Santa Fe-Lokomotive. Hierzu hat A. Raven eine Include-Datei mit dem Namen santa_fe_super_chief.mac geschrieben. Diese Datei ist neben anderen Dateien enthalten in der ZIP-Datei 10020_santa_fe_super_chief_3.7.zip (49,5 kB).
Diese Datei wird entzipped. Man erhält eine Reihe von Dateien. Diese müssen aus dem PovRay-Programm heraus geladen werden. Am besten legt man dazu einen Ordner unterhalb der Standard-Include-Dateien zur Aufnahme dieser Dateien an. Dieser könnte SantaFeChief heißen. Man sollte auf jeden so verfahren, da sonst die Übersichtlichkeit der verschiedenen Dateien - darunter auch einige Bilddateien, die von den Include-Dateien benötigt werden. Auch die beiden Dateien für die verschiedenen Legosteine sollte man in ein gesondertes Verzeichnis unterhalb von Include ablegen. Hier heißt der Ordner Raven.
Der Aufruf aus dem PovRay-Programm lautet:
#include "\Raven\material.lib"
#include "\Raven\library.lib"

Das vollständige Programm in PovRay lautet dann wie folgt:

#include "\Raven\material.lib"
#include "\Raven\library.lib"
#include "\SantaFeChief\santa_fe_super_chief.mac"
#include "\SantaFeChief\man_068.mac"
union {
object { train_rails_straight() translate <-128, 0, -28> }
object { train_rails_straight() translate <0, 0, -28> }
object { train_rails_straight() translate <128, 0, -28> }
object { train_rails_straight() translate <256, 0, -28> }
object { train_rails_straight() translate <384, 0, -28> }
object { train_rails_straight() translate <512, 0, -28> }
object { santa_fe_super_chief(1,0) translate <103, 9.5, 0> }
rotate <0, -145, 0> translate <55, 0, 0>
object{man_068(-20,0,0,0,0,0,0,10,red_text_1) rotate-10*y translate<-50,11,10>}}

Anton Raven hat eine große Anzahl von Objekten erstellt. Zwei weitere sieht man in den beiden oberen Bildern. In der folgenden ZIP-Datei sind etliche andere Objekte für PovRay zusammengefasst. Wenn man diese ZIP-Datei entzipped, erhält man eine Reihe weiterer ZIP-Dateien, die man so weiterverarbeitet wie oben mit der Santa-Fe-Lok gezeigt wurde.
PovRay-Objekte - 634 kB

Der Quellcode für die Schienen
#declare gleis =union {
object{train_rails_straight() scale<0.07,0.07,0.07> translate <47,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <38,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <29,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <20,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <11,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <2,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <-7,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <-16,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <-25,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <-34,0,-15>}
object{train_rails_straight() scale<0.07,0.07,0.07> translate <-43,0,-15>}}

Achtung:
Bei den Schienen kann keine Farbe angegeben werden. Sie ist in der lib-Datei auf grey2_tex eingestellt.
In der folgenden Tabelle sind die zur Verfügung stehenden Farben zusammengestellt. Sie werden mit dem Befehl texture{Farbname} eingefügt.

beige_tex dark_cyan_tex lt_grey_tex
black_tex dark_grey2_texmint_tex
blue_tex dark_red_tex orange_tex
blue2_tex green_tex orange_bright_tex
bnsf_green_tex green2_tex purple_tex
brown_tex lt_green_tex red_tex
brown2_tex grey_tex white_tex
cyan_tex grey2_tex yellow_tex
Der Quellcode für Lokomotive
#declare lok = union {
object{train_9v_motor(1) scale<0.1,0.1,0.1> translate<4,0,-1>}
object{train_bottom6_16(grey_tex) scale<0.1,0.1,0.1> translate<-2,2,-3>}
object{train_cabine_window(red_tex,texture{ pigment{Clear}}) scale<0.1,0.1,0.1>
rotate <0,0,0> translate <2.8,7.4,-3.1>}
object{h_hrblock2_2(red_tex)scale<0.1,0.1,0.1> rotate <0,180,0> translate <-2.1,2.3,-2.2>}
object{h_hrblock2_2(red_tex)scale<0.1,0.1,0.1> rotate <0,270,0>
translate <-2.1,2.3,0.2>}
usw.
Achtung:
Die Zusammenstellung der Lego-Steine für die Lok ist sehr umfangreich, wie man aus dem (unvollständigem) Code ersehen kann.