====== Programm "Installation" und Start ======
==== Installation ====
Dieser Vorgang muss nur ausgeführt werden, wenn im Laufwerk C: kein Ordner POV-Ray existiert.
* Im Klassenlaufwerk finden Sie im Ordner Mathe die Datei **pvinst.bat**. Starten Sie diese. Dieser Vorgang muss nur einmal ausgeführt werden.
==== Programmstart ====
* Im Laufwerk C:, im Ordner POV-Ray, starten Sie die Datei **pvstart.bat**.
* Legen Sie eine neue POV-Ray Datei an und speichern Sie diese mit der Dateiendung .pov an einem geeigneten Ort. Für Animationen speichern Sie die Datei in einem separaten Ordner nur für diese Datei.
====== POV-Ray Aufgaben ======
Grundstruktur:
// 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 <20,8,18> // Position der Kamera
look_at <0, 0, 1> // Blickrichtung (erscheint im Bildmittelpunkt)
angle 30 // Öffnungswinkel der Kamera
}
// Lichtquellen
light_source {
<12,-2,12> // Position des Lichts
color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1)
}
light_source {
<13,10,13> // Position des Lichts
color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1)
}
// Boden (xy-Ebene, kariert mit Quadraten von Seitenlänge 1)
plane {
z,0 // Ebene, senkrecht zu z=<0,0,1>, mit Abstand 0 zum Ursprung
pigment { // Schachbrett
checker color rgb <1,1,1>, color rgb <0.2,0.2,0.2>
}
finish { reflection 0.4 }
} // Ende Boden
===== Aufgabe 441 =====
Erst werden die Parameter der Aufgabe festgelegt, dann eine Person definiert (kann noch beliebig verkompliziert werden)
und schliesslich die beiden Personen dargestellt.
Um die Animation zu rendern, muss in POV-Ray noch die Option "+KFF20" eingetragen werden, damit z.B. 20 Bilder erzeugt werden.
// TODO
// HIER FEHLT NOCH KAMERA, LICHT UND BODEN
#declare oa=<0,4,0>; // Startposition A
#declare va=<1,0,0>; // Geschwindigkeitsvektor A
#declare ob=<3,0,0>; // Startposition B
#declare vb=<0,1,0>; // Geschwindigkeitsvektor B
#declare zeit=clock*6; // Total 6 Sekunden simulieren
#declare person=union { // Person, zentriert auf <0,0,0>, Blickrichtung in x-Richtung
box { <-0.15,-0.3,0>, <0.15,0.3,1.7> }
} // Ende union Person
// Person A
object { person
// TODO
// translate HIER DIE POSITION AUS DER zeit BERECHNEN
pigment { color rgb <1,0,0> }
} // Ende Person A
object { person
rotate 90*z // damit die Person in y-Richtung schaut.
// TODO
// translate HIER DIE POSITION AUS DER zeit BERECHNEN
pigment { color rgb <0,1,0> }
} // Ende Person A
Wer möchte, kann sich überlegen, wie man noch Beine animieren könnte. Dazu eignet sich die Modulo-Funktion:
#declare beinzeit = mod(zeit,1.0); // Liefert die Nachkommastellen
// TODO
// AUS beinzeit DIE POSITION DER FUESSE BERECHNEN
// 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 <20,8,18> // Position der Kamera
look_at <5, 5, 1> // Blickrichtung (erscheint im Bildmittelpunkt)
angle 30 // Öffnungswinkel der Kamera
}
// Lichtquellen
light_source {
<12,-2,12> // Position des Lichts
color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1)
}
light_source {
<13,10,13> // Position des Lichts
color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1)
}
// Boden (xy-Ebene, kariert mit Quadraten von Seitenlänge 1)
plane {
z,0 // Ebene, senkrecht zu z=<0,0,1>, mit Abstand 0 zum Ursprung
pigment { // Schachbrett
checker color rgb <1,1,1>, color rgb <0.2,0.2,0.2>
}
finish { reflection 0.4 }
} // Ende Boden
#declare oa=<0,4,0>; // Startposition A
#declare va=<1,0,0>; // Geschwindigkeitsvektor A
#declare ob=<3,0,0>; // Startposition B
#declare vb=<0,1,0>; // Geschwindigkeitsvektor B
#declare zeit=clock*6; // Total 6 Sekunden simulieren
#declare person=union { // Person, zentriert auf <0,0,0>, Blickrichtung in x-Richtung
box { <-0.15,-0.3,0>, <0.15,0.3,1.7> }
} // Ende union Person
#declare halbeSeite=2; // ACHTUNG Gross/Kleinschreibung!
#declare abstand=1;
#declare truppe = union {
// Einrücken mit TAB (oberhalb CapsLock=)
#declare posx=-halbeSeite; // x-Position einer Person in der Truppe
#while (posx<=halbeSeite) // Wieder holen, von -halbeSeite bis +halbeSeite
#declare posy=-halbeSeite; // Dito für posy
#while (posy <= halbeSeite)
object { person // Person platzieren
translate abstand*
}
#declare posy=posy+1;
#end // while posy
#declare posx=posx+1;
#end // while posx
} // union
// Person A
object { truppe
// TODO
translate oa+zeit*va // Parameterdarstellung der Geraden a
pigment { color rgb <1,0,0> }
} // Ende Person A
// Person B
object { truppe
rotate 90*z // damit die Person in y-Richtung schaut.
// TODO
translate ob+zeit*vb // Parameterdarstellung der Geraden b
pigment { color rgb <0,1,0> }
} // Ende Person A
===== Video-Encoding mit ffmpeg =====
C:\ffmpeg-20180831-3ad0e67-win64-static\bin\ffmpeg.exe -i .\aufgabe441og%02d.png movie.mp4