Aufgabe 0
Speichern / Kopieren Sie folgenden Code und fügen den fehlenden Code unten ein (im Moment Kommentare).
- schnecke.pov
// Kamera camera { sky <0,0,1> // Vektor, der festlegt, wo oben ist. right <-4/3,0,0> // Bildverhältnis 4:3, plus Spiegelung für rechtsdrehendes System location <10,2,5> // Position der Kamera look_at <0, 0, 0> // Blickrichtung (erscheint im Bildmittelpunkt) angle 30 // Öffnungswinkel der Kamera } // Lichtquellen light_source { <6,-2,8> // Position des Lichts color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1) } light_source { <3,10,3> // Position des Lichts color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1) } plane {z,0 pigment {granite scale 10} normal { bozo } finish { reflection 0.9} } #declare umdrehung=-4; // Start der Umdrehungen #declare ende=2; // Ende der Umdrehungen #declare sf=1.6; // Streckfaktor pro Umdrehung #declare schritte=50; // 50 Schritte pro Umdrehung #while (umdrehung<ende) // Solange wie umdrehung<ende wiederhole alles zwischen hier und #end #declare r = pow(sf,umdrehung); // sf hoch umdrehung // // Eine Kugel an die Position <0,r,0> mit kleinem Radius platzieren // und danach um umdrehung*360 um die z-Achse drehen // // HIER FEHLT IHR CODE #declare umdrehung = umdrehung + 1/schritte; #end //while
Aufgabe 1
Variieren Sie jetzt den Radius der Kugeln so, dass der Kugelradius proportional zu $r$ ist. Passen Sie eventuell die Kameraeinstellungen an. Mögliches Resultat:
Aufgabe 2
Die $z$-Koordinate der Kugeln soll nun ebenfalls linear mit dem Radius variieren. Die $z$-Koordinate soll grösser (höher) für kleine Werte von $r$ sein und für grössere $r$ dann kleiner werden. Mögliches Resultat:
Aufgabe 3
Die Modulo-Operation 'mod(a,b)' berechnet den Rest der ganzzahligen Division a/b. Z.B. ist mod(128,10) = 8, MOD(128,5) = 3, mod(128,16) = 0, etc.
- Vor der while-Schleife, definieren Sie eine weitere Variable 'num' und initialisieren Sie diese auf 0.
- Vor dem Ende der while-Schleife, zählen Sie die Variable 'num' um 1 hoch (inkremieren).
- Mittels if/else/end können Dinge nur unter bestimmten Bedingung ausgeführt werden. Ersetzen Sie die “pigment-Zeile” der Kugel durch folgende fünf Zeilen, die je nachdem, die eine oder andere pigment-Zeile einfügen:
#if (mod(num,2) = 0) pigment {color rgb x} #else pigment {color rgb z} #end
Variieren Sie nun die Farbe der Kugeln (gibt wohl noch schönere Fabrkombinationen als rot/blau)… Mögliches Resultat:
Es ist auch möglich ohne if/else/end auszukommen, indem man die Farbe wie folgt definiert:
pigment { color rgb <mod(num,2), 0, 1-mod(num,2)> }
Aufgabe 4
Aufgabe 5
Aufgabe 6
Der Code von Aufgabe 5 enthält wohl einige Wiederholungen, was die Transformationen angeht. Vor der while-Schleife, definieren Sie ein Objekt 'teil', das in der $y/z$ Ebene um den Ursprung zentriert ist.
#declare teil = union { // lauter tolle Dinge hier (Kugel, Tori, Tori mit Stacheln etc... }
Das 'teil' wird jetzt in der while-Schleife verwendet und entsprechend transformiert und in der Grösse angepasst (scale):
object { teil scale 0.5*r // oder was auch immer passt. // veschieben und Drehen... }
Das 'teil' kann nun selbst wieder mit einer while-Schleife definiert werden (innerhalb von union) um z.B. so etwas so erzeugen:
Ein einzelnes 'teil' ist in blau abgebildet. Das 'teil' besteht aus Kugeln, die in zwei Achsenrichtungen mit 0.2 gestreckt wurden.
Weitere Anregungen
- Platzieren Sie Lichtquellen im Schneckenhaus drin
- Variieren Sie die Farbe kontinuierlich (Farbverlauf, wie z.B. ein Regenbogen)
- Drehen Sie das 'teil' zusätzlich um die Gangachse.