kurse:povray23:hilfenfuerprojekte

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
kurse:povray23:hilfenfuerprojekte [2023/08/22 06:43] – [Test der Animation in einem einzigen Bild] Ivo Blöchligerkurse:povray23:hilfenfuerprojekte [2023/08/22 15:24] (current) – [Hohle Röhre] Ivo Blöchliger
Line 1: Line 1:
 +====== 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:
 +<code povray>
 +// So läuft die Variable myclock von 0 bis 4
 +#declare myclock=4*clock;
 +</code>
  
 +===== 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)'':
 +
 +
 +<code povray>
 +// 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)> }
 +}
 +</code>
 +
 +===== 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.
 +<code povray>
 +// 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 (frame<numFrames) // Hier < durch <= ersetzen, wenn das letzte Frame auch gerendert werden soll.
 +  #if (numFrames>1)
 +    #declare myclock=frame/numFrames;
 +  #end // if
 +  
 +  //
 +  // Hier der Animationscode, alles mit myclock (und nicht direkt clock)
 +  //
 +   
 +  #declare frame=frame+1;
 +#end // while
 +
 +</code>
 +
 +===== Kopien von Objekten aber mit unterschiedlicher Zeit =====
 +Man kann Macros definieren, die von Parmetern abhängen, z.B. wie folgt:
 +<code povray>
 +#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...
 +</code>
 +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 =====
 +<code povray>
 +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).
 +}
 +</code>