Der Zaun besteht aus mehreren Objekten zaunfeld. Jedes Zaunfeld besteht aus einer Anzahl gleichartiger Zaunlatten, einen Zaunpfeiler sowie zwei Querbalken (Riegel). Zu Beginn wird ein Objekt latte erzeugt. Es besteht aus einer einfachen Box, die durch difference auf der einen Seite die Abschrägungen erhält. Dieses Objekt latte wird in einer while-Schleife mehrfach hintereinander gesetzt und erzeugt das Zaunfeld. Zwei einfachen Boxen bilden die Riegel und eine weitere Box den Pfeiler. Damit das Zaunfeld variabel gestaltet werden kann (Anzahl der Latten, Höhe...) werden alle Angaben in Variablen deklariert. |
|
1. Grundeinstellung:
//Der Lattenzaun
#include "colors.inc"
#include "textures.inc"
#include "metals.inc"
#include "stones.inc"
global_settings { assumed_gamma 1.0 }
camera {
location <-4,1,-15>
look_at <10,2,0>
}
light_source
{<1500, 2500, -2500>
color rgb <1, 1, 1>
}
light_source
{<-1500, 2500, -2500>
color rgb <1, 1, 1>
}
background {rgb <0.5,0.5,1>}
plane {<0,1,0>, -0.1
pigment {color rgb <0,1,0>}
}
|
![]() |
Jetzt müssen die Variablen deklariert werden: #declare hoehe=7; #declare breite=0.3; #declare dicke=0.1; #declare hoehe_spitze=0.2; und die erste Box der Zaunlatte kann konstruiert werden. Damit sie mit der Mitte genau auf der y-Achse liegt, muss sie um die Hälfte der breite nach links verschoben werden. Als Texture kan eine Holzstruktur eingesetzt werden, ist aber noch nicht notwendig. |
|
| Zur Erzeugung der Spitze kommen zwei weitere Boxen zum Einsatz, die entsprechend der Abbildung angeordnet werden. Die Farben und die Höhe sind egal. Die Dicke muss etwas größer sein als die Dicke der Zaumlatte, damit bei der folgenden Differenzenbildung keine Fehler auftreten. Aus diesem Grund müssen die beiden Boxen auch etwas nach hinten verschoben werden. | ![]() |
| Wenn man nun die beiden schrägen Boxen über difference aus der großen Box herausschneidet, erhält man die Spitze der Zaunlatte. Dazu ist das Objekt latte zu deklariere. Hinweis: Damit es sichtbar wird, muss es am Ende der Szene mit
object{latte}
angezeigt werden.Das die Spitze nach unten zeigt ist nicht schlimm, sie wird in der folgenden Darstellung noch gedreht und zeigt dann nach oben. |
![]() |
Als nächstes werden zwei Latten nebeneinander dargestellt. Die beiden einzelnen Latten sind als Objekt zaunfeld zu vereinigen und darzustellen. |
![]() |
Es ist klar, dass das nicht der richtige Weg sein kann, um ein komplettes Zaunfeld darzustellen. Erstens ist es eine mühsame Arbeit und zweitens ist es nicht flexibel. Die Anzahl der Latten und damit die Breite des Feldes soll einstellbar sein. Es ist eine neue Variable anzahl_feld zu definieren. Als Wert wird ihr 20 zugeordnet. Die einzelnen Latten werden durch eine while-Schleife dargestellt.
#declare nummer=0;
#while (nummer< anzahl_feld)
object {latte
Die while-Schleife erhält in der Klammer eine Zählvariable, hier nummer und eine Abbruchbedingung, hier nummer<anzahl_feld. Damit wird die Schleife sooft durchlaufen, wie die Abbruchbedingung noch erfüllt ist. Solange die Anzahl der Latte kleiner ist als die maximale Anzahl, wird die Schleife ausgeführt. In der nächsten Zeile wird die Latte gezeichnet. Die Verschiebung nach rechts wird aus der Nummer der Latte berechnet. Nun wird der Zähler um eins erhöht und die Schleife bei nicht erreichen der Anzahl der Latten noch mal ausgeführt. Die Schleife muss im Quelltext mit #end abgeschlossen werden. Da die Anzahl der Latten nur durch die Variable anzahl_feld vorgegeben wird, kann das Zaunsfeld ganz unterschiedliche Dimensionen annehmen.
|
![]() |
| Im letzten Schritt werden noch die beiden hinteren Bretter hinzugefügt. Sie befinden sich in 1/4 und 3/4 der Höhe der Latten. Der Pfeiler kommt nur auf die linke Seite. Dadurch können dann mehrere Objekte Zaunfeld hintereinader angeordnet werden. Der letzte Pfeiler muss dann extra angebaut werden. | ![]() |
Links zum Lattenzaun :
Lattenzaun1
Lattenzaun2
Lattenzaun3