Transformationen
Aufgabe 0
Studieren Sie folgende Abschnitte und probieren Sie die Codeschnipsel aus, indem Sie diese in eine Szene mit Kamera und Licht kopieren (und evtl. ein Koordinatensystem).
translate
Mit 'translate' können Objekte verschoben werden, z.B.
sphere { <0,0,0>,1 pigment { color rgb x } // rot translate <1,2,1> // Kugel hat jetzt neu (1,2,1) als Zentrum }
rotate
Mit 'rotate' können Objekte gedreht werden (rechtsdrehend um die $x$-, $y$- oder $z$-Achse). Winkelangabe in Grad.
Rechtsdrehend heisst, dass wenn der Daumen der rechten Hand in Richtung der Drehachse zeigt, wird das Objekt in Richtung der Finger um die Achse gedreht.
box { <0,0,0>,<1,1,1> // Einheitswürfel pigment { color rgb y } // grün rotate 45*z // Dreht den Würfel nach rechts hinten }
scale
Mit 'scale' können Objekte gestreckt werden. Entweder wird der Streckfaktor als Zahl, oder ein Vektor mit Streckfaktoren in die 3 Achsenrichtungen angegeben:
sphere { <0,1,0>,1 pigment { color rgb z } // blau scale <1,1,0.2> // Streckt mit 0.2 in z-Richtung -> kommt flach heraus ;-) }
Achtung: Es wird immer bezüglich dem Nullpunkt gestreckt. Man sollte die Objekte um den Nullpunkt zentrieren (falls nötig mit 'translate'), dann strecken und am Schluss noch an die richtige Position schieben.
torus
Ein Torus ist eine Art Veloschlauch. Dieser kann durch die Angabe von 2 Radien spezifiziert werden: Distanz von der “Radachse” zur Schlauchmitte und Radius des Schlauchrohres. Siehe http://www.povray.org/documentation/view/3.7.0/288/
Ein so definierter Torus hat sein Zentrum immer im Ursprung und liegt in der $x/z$-Ebene.
torus {1, 0.1 pigment {color rgb x+y} // gelb }
Aufgabe 1
Verwenden Sie 'rotate' und 'translate', um die Tori an die gewünschte Position zu bringen. Laden Sie ebenfalls ihr Koordinatensytem (mit #include) in ihre Szene.
Erstellen Sie folgende Szenen:
- Torus, der auf der $x/y$-Ebene liegt (d.h. diese berührt). Der Torus soll um die $z$-Achse zentriert sein.
- Einen zweiten, gleich grossen Torus, der in $y$-Richtung verschoben ist und den ersten von aussen berührt.
- Einen dritten, gleich grossen Torus (ebenfalls auf der $x/y$-Ebene), der beide Tori von aussen berührt. Anstatt zu rechnen, vewenden Sie translate und rotate.
Aufgabe 2
Programmieren Sie drei Tori, die ineinander hängen und sich exakt von innen her berühren. Der mittlere Torus ist natürlich um 90 Grad gedreht.
Tip: Mit folgender Anweisung, innerhalb eines Objekts, können Sie dieses spiegelnd machen:
finish { phong 0.95 reflection {0.95} }
Spiegelnde Objekte leben von ihrer Umgebung. Fügen Sie z.B. einen Himmel hinzu.
union, declare, object
Objekte können zu einem Objekt zusammengefasst werden und dann als Ganzes manipuliert werden. Das ist vor allem dann nützlich, wenn man Objekt verschieben, drehen und/oder kopieren möchte:
// Speichern in die Variable schneemann (wird noch nichts angezeigt) #declare schneemann = union { sphere { <0,0,0.5>, 0.5 } sphere { <0,0,1.5>, 0.5} } // Objekt gebrauchen: object { schneemann pigment { color rgb 1 } // Weiss } object { schneemann pigment { color rgb x } // Rot translate <0,2,0> // Verschieben }
Aufgabe 3
Folgender Code erzeugt einen halben Torus:
#declare rund = difference { // Halber torus (in x/z-Ebene, Teil mit positiver x-Koordinate torus {1, 0.2} plane {x, 0} } object{rund pigment{color rgb x} }
Bauen Sie daraus ein Kettenglied (mit zwei halben Tori und zwei Zylindern). Definieren Sie dann eine neue Variable (z.B. kettenglied) und stellen Sie dann wieder eine Kette dar.
Mit Hilfe von Wiederholungen, stellen Sie folgendes dar:
- eine Kette mit vielen Gliedern
- eine Kette die im Kreis geschlossen ist
- ein Kettenhemd, mit runden gliedern (bzw. zwei-dimensionale Kette)
- Hängende Kette entlang einer Parabel