4. Lego on the hard way
Zur Homepage: Anton Raves
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.

Anton Raves hat alle Lego-Steine in einer Include-Datei zusammengestellt. Diese wird ständig erweitert und kann von seiner Seite heruntergeladen werden. Diese Dateien heißen:
material*.lib
library*.lib
Stern steht für die Versionsnummer.
Zur Zeit (Juli 2014) gibt es die folgende Version:
1. 541_library.zip (327 kb) - entzipped etwa 3 MB
2. 539_reference_images.zip (15,2 MB) – entzipped etwa 30 MB. Hier liegen alle Lego-Bausteine als JPG-Bild vor. Der Name der JPG-Datei ist der Name für den entsprechenden Legostein.

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.

Als Beispiel soll hier eine Lok, die auf Schienen steht, angegeben werden. Während die Schienen relativ einfach zusammengefügt werden können, sieht das mit der Lok schon anders aus.

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.