Zurück zur Vortragliste | Zum vorherigen Vortrag | Zum nächsten Vortrag |
Auch POV-Ray kann Animationen berechnen. Man muß ihm dazu vorgeben, was sich von Bild zu Bild ändern soll, und aus wieviel Zwischenbildern die Animation besteht.
Zeile in einer INI-Datei | Kürzel als Komandozeilenparameter | Bedeutung | Defaultwert |
---|---|---|---|
[Initial_Frame = n] | [+KFIn] | Bild n ist das erste Bild | 1 |
Final_Frame = n | +KFFn | Bild n ist das letzte Bild | - |
[Initial_Clock = n.n] | [+KIn.n] | Anfangswert der Variablen clock ist n.n | 0.0 |
[Final_Clock = n.n] | [+KFn.n] | Endwert der Variablen clock ist n.n | 1.0 |
Um POV-Ray eine Animation berechnen zu lassen, muß im einfachsten Fall nur Final_Frame gesetzt werden. Es entspricht dann der Bilderanzahl der Animation. Ansonsten gilt:
Bildanzahl = Final_Frame - Initial_Frame + 1
In POV-Ray ist es möglich mit
"#declare Name=Zahl"eine Variable zu definieren. Diese können in einer POV/INC-Datei Zahlen ersetzen und verrechnen.
Berechnet POV-Ray eine Animation, so ist in der POV-Datei automatisch eine Variable clock definiert. Wenn Initial_Clock und Final_Clock nicht angegeben werden, so geht clock von 0 bis 1. Bei einer 3-Bilder-Animation z.B. hat clock beim ersten Bild den Wert 0, beim zweiten Bild den Wert 0.5 und beim dritten Bild den Wert 1.
Damit in dem zu rendernden POV-File nicht jedes Bild der Animation gleich aussieht, muß die Variable clock verwendt werden. Diese kann normale Zahlen/Konstanten ersetzen und beliebig verrechnet werden.
Als Dateinamen sollten jetzt nur noch kürzere Dateinamen angegeben werden, da die Nummer eines Bildes an den Dateinamen drangehängt wird, der insgesamt nur 8 Buchstaben haben darf. D.h. bei zweistelligen Bilderanzahlen sollte der Dateiname nur 6 Buchstaben lang sein.
Rechenfunktion | Befehl in POV-Ray |
---|---|
Grundrechenarten | (6-5*clock+3)/2 |
Sinus,Arcussinus von x (Trigonometrische Funktionen benötigen ihre Parameter im Bogenmaß) | sin(x), asin(x) |
Cosinus,Arcuscosinus von x | cos(x), acos(x) |
Tangens von x | tan(x) |
Arcustangens von a/b | atan(a,b) |
x° im Bogenmaß | radians(x) |
a hoch b | pov(a,b) |
Quadratwurzel von x | sqrt(x) |
e hoch x | exp(x) |
Logarithmus von x zur Basis e | log(x) |
Aufrunden von x | ceil(x) |
Abrunden von x | floor(x) |
Schneidet Nachkommastellen von x ab | int(x) |
Ganzzahlige Division von a durch b | div(a,b) |
Divisionsrest von a/b | mod(a,b) |
Der größere Wert von a und b | max(a,b) |
Der kleinere Wert von a und b | min(a,b) |
Zufallswert zwischen 0.0 und 1.0 (einschließlich) | rand() |
Handelt sich es bei einer Animation z.B. um eine Drehung, so entsteht bei einer
Drehung um 360° wieder das selbe Bild, wie bei 0°. Wird POV-Ray mit
Die Bedingung kann z.B. ein Vergleich sein:
Die Befehle nach #else werden ausgeführt, wenn die Bedingung nicht zutrifft!
Will man je nach Zustand einer Variable bestimmte Befehle ausführen,
so kann man die #switch-Anweisung verwenden.
Syntax einer #switch-Anweisung:
Die Befehle nach dem #case ( Wert1 ) werden nur ausgeführt, wenn die Variable gleich Wert1 ist. Gleiches gilt für die Befehle nach #case ( Wert2 ), wenn die Variable gleich Wert2 ist.
Die Befehle nach dem #range werden dagegen dann ausgeführt,
wenn die Variable zwischen VonWert1 und BisWert1 liegt (je einschl. Randwert).
Es werden immer nur die ersten Befehle ausgeführt, für die die Bedingung erfüllt ist.
Syntax einer #while-Schleife:
Die Befehle werden solange ausgeführt, solange die Bedingung erfüllt ist.
Das folgende Beispiel erzeugt ein Feld von 3 auf 2 Würfel.
SIMPLE.POV: SIMPLE.INI:3. In Abschnitte aufteilen
Bei großen Animationen bietet es sich manchmal an, die Berechnung auf mehrere
Rechner zu verteilen. Dabei hat man die Möglichkeit Initial_Frame
und Final_Frame auf die Gesamtanzahl der Bilder der Animation zu
setzen und jedem Rechner einen anderen Bereich mit Startnummer und Endnummer der
Bilder anzugeben. Dabei sind folgende Kommandos interessant:
Zeile in einer INI-Datei
Kürzel als
KomandozeilenparameterBedeutung
Subset_Start_Frame=n +SFn Setzt das Anfangsbild auf n
Subset_Start_Frame=0.n +SF0.n Setzt den Anfang des Bereichs auf n%
Subset_End_Frame=n +EFn Setzt das Endbild auf n
Subset_End_Frame=0.n +EF0.n Setzt das Ende des Bereichs auf n%
4. Bedingungen
In POV-Ray ist es möglich, bestimmte Befehle nur bedingt auszuführen.
Syntax einer #if-Abfrage:
#if ( Bedingung )
... Befehle ...
#else
... Befehle ...
#end
Bedingung Die Befehle nach der #if-Anweisung werden ausgeführt ... a > b wenn a größer b ist a < b wenn a kleiner b ist a = b wenn a gleich b ist a != b wenn a ungleich b ist a >= b wenn a größer oder gleich b ist a <= b wenn a kleiner oder gleich b ist
#switch ( Variable )
#case ( Wert1 )
... Befehle ...
#break
#case ( Wert2 )
... Befehle ...
#break
#range ( VonWert1,BisWert1)
... Befehle ...
#break
...
#end
5. Schleifen
Manchmal kann es auch sinnvoll sein, eine Reihe von Befehlen mehrfach mit geringer
Veränderung auszführen. In POV-Ray gibt es dafür sogenannte #while-Schleifen.
#while ( Bedingung )
... Befehle ...
#end
#declare x=0
#while (x < 3)
#declare y=0
#while (y < 2)
box {< x*2-2.5,y*2-1.5,0 >,
< x*2-1.5,y*2-0.5,1 >
}
#declare y=y+1
#end
#declare x=x+1
#end
6. Beispiel
#include "colors.inc"
background {color Blue}
box { < 0,-1,-1 >,< 1,2,2 >
pigment {Red}
}
box { < -1,-1,0 >,< 2,2,1 >
pigment {Green}
}
box { < -1,0,-1 >,< 2,1,2 >
pigment {Blue}
}
camera
{
location < 0.5+5*cos(clock*2*pi),sin(clock*2*pi),0.5+5*sin(clock*2*pi) >
look_at< 0.5,0.5,0.5 >
}
light_source
{
< 0.6+5*cos(clock*2*pi),sin(clock*2*pi)+0.3,0.4+5*sin(clock*2*pi) > color White
}
Input_File_Name=SIMPLE.POV
Final_Frame=40
Cyclic_Animation=on
Zurück zur Vortragliste