====== Generelle Hilfen ====== ===== Anderer Bereich für die Zeit ===== Die ''clock''-Variable in POV-Ray läuft (normalerweise) von 0 bis 1 (ohne Angabe von +KC inklusive 1, mit +KC exklusive). Vielleicht haben Sie Ihre Animation in einem anderen Bereich parametriert, dann schlage ich folgendes vor: // So läuft die Variable myclock von 0 bis 4 #declare myclock=4*clock; ===== Eigene mathematische Funktionen ===== Folgende Funktion gliedert sich in zwei Teile. Ich habe es nicht hingekriegt, eine bedingte Funktion direkt in POV-Ray zu realisieren. Darum eine eigene Funktion ''myif(bedingung, wennwahr, wennfalsch)'': // Für bedingte Funktionen #declare myif=function(bedingung, wennwahr, wennfalsch) { bedingung*wennwahr+(1-bedingung)*wennfalsch } // Folgende Funktion ist immer Null zwischen 0 und 0.7, danach steigt die Funktion linear durch den Punkt $(1,1)$. #declare durchsichtig=function(zeit) { myif(zeit<0.7, 0, (zeit-0.7)/0.3) } // Benutzung der Funktion object { meinCoolesDing pigment { color rgbt <1,0,0,durchsichtig(clock)> } } ===== Test der Animation in einem einzigen Bild ===== Anstatt 20 (oder mehr) Bilder zu rendern, kann mit einem Trick auch ein einziges Bild mit allen Schritten gerendert werden. Der eigene Animationscode muss aber in eine Schleife eingepackt werden und es muss immer mit einer eigenen Zeitvariablen (z.B. myclock) gearbeitet werden. // Kamera // Licht // Eigene zeitunabhängige Variablendefinitionen #declare myclock=clock; // Default Wert, damit die Animation dann gerendert werden kann. #declare numFrames=20; // Auf Eins setzen für normale Animation #declare frame=0; #while (frame1) #declare myclock=frame/numFrames; #end // if // // Hier der Animationscode, alles mit myclock (und nicht direkt clock) // #declare frame=frame+1; #end // while ===== Kopien von Objekten aber mit unterschiedlicher Zeit ===== Man kann Macros definieren, die von Parmetern abhängen, z.B. wie folgt: #include "transforms.inc" #declare meinDing=union{ // Grundkörper } #marcro meinCoolesDing(orientierung, zeit) object { meinDing rotate 360*zeit*z Reorient_Trans(z, orientierung) // Dreht so, dass die z-Achse in Richtung des Vektors 'orientierung' zeigt } #end // Benutzung des Macros object { meinCoolesDing(<1,1,1>, 0) pigment {color rgb x} } object { meinCoolesDing(<-1,-1,1>, 0.25) pigment {color rgb y} } // etc... Hinweis: Die Vektoren ''<1,1,1>'', ''<-1,-1,1>'', ''<-1,1,-1>'' und ''<1,-1,-1>'' Zeigen zu den Eckpunkten eines regulären Tetraeders. ===== Tangente an eine Wurfparabel ===== Wird eine Wurfparabel in folgender Form geschrieben (dazu sind wohl Umformungen nötig): \[ \vec{OP}(t) = \vec p_0 + t \cdot \vec v_0 + t^2 \cdot \vec a, \] dann ist der Geschwindigkeitsvektor der folgende: \[ \vec v(T) = \vec v_0 + 2\cdot t \cdot \vec a \] Mit dieser Tangente kann dann z.B. ein Zylinder ausgrichtet werden. ===== Hohle Röhre ===== difference { cylinder {0, z, 1 } // Grundform cylinder {-0.1*z, 1.1*z,0.9 } // Ausschnitt (sollte keine zusammenfallenden Flächen haben, darum von -0.1*z bis 1.1*z). }