kurse:povray23:hilfenfuerprojekte

This is an old revision of the document!


Generelle Hilfen

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;

Folgende Funktion gliedert sich in zwei Teile. Der Syntax für ein if in einer Funktion ist

Bedingung ? Ausdruck wenn wahr : Ausruck wenn falsch

// Folgende Funktion ist immer Null zwischen 0 und 0.7, danach steigt die Funktion linear durch den Punkt $(1,1)$.
#declare durchsichtig=function(zeit) {
   zeit<0.7 ? 0 : (zeit-0.7)/0.3;
}
// Benutzung der Funktion
object {
   meinCoolesDing
   pigment { color rgbt <1,0,0,durchsichtig(clock)> }
}

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.

// Kamera
// Licht
// Eigene Variablendefinitionen
 
#declare numFrames=20;  // Auf Null setzen für normale Animation
#declare frame=0;
#while (frame<numFrames) // Hier < durch <= ersetzen, wenn das letzte Frame auch gerendert werden soll.
  #if (numFrame>0)
    #declare clock=frame/numFrames;
  #end // if
 
  //
  // Hier der Animationscode
  //
 
  #declare frame=frame+1;
#end // while

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.

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.

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).

}

  • kurse/povray23/hilfenfuerprojekte.1692685964.txt.gz
  • Last modified: 2023/08/22 08:32
  • by Ivo Blöchliger