Ein Rundgang durch's Haus
Wegpunkte
Nun wollte ich einen Film drehen, einen Weg durch das virtuelle Haus. Zunächst musste ich den Weg definieren. Also wurden zunächst die Wegpunkte festgelegt.
Rechts geht's vom Eingang zur Küchentür, in die Küche hinein mit einem Schlenker durch den Raum, danach ins Wohnzimmer und weiter Richtung Flur.
def Rundweg(self): eingang_m = (eg_u6+eg_u4)/2 kuechentuer_m = eg_l6+7+(85/2.0) ... p = [(eingang_m,eg_l0-500, 150), (eingang_m,eg_l0-400, 150), (eingang_m,eg_l6, 150), (eg_u2,kuechentuer_m, 150), ...
Kamera-Geschwindigkeit
Die Wegpunkte bilden die Basis für ein kubisches Spline. Nur hatte ich mit einer direkten Übertragung das Problem, daß die Kamera unterschiedlich schnell war, da z.B. Eingang -> Flur eine wesentlich längere Wegstrecke hatte als Flur -> Küchentür.
Wird von sämtlichen x/y-Koordinaten die jeweilige Entfernung berechnen, diese aufsummiert und danach als Normierung verwendet. Heraus kommen Koordinaten wie diese hier:
#declare WegSpline = spline { cubic_spline -0.052950 <343,132,-500>, 0.000000 <343,132,-400>, 0.377266 <343,132,312>, 0.430382 <256,132,362>, 0.479969 <176,132,312>, ... }
Man sieht schön, daß die Punkte etwa gleich weit entfernt sind.
Der Film
Nun wurden die Wegpunkte für EG und OG gesetzt. Anschließend setzt man die Kamera jeweils auf einen vom Spline errechneten Punkt und lässt sie in der x/y-Ebene auf den nächsten Wegpunkt blicken. In der z-Achse (hoch/tief) sollte man das nicht machen, sonst bekommt man im Treppenhaus schlechte Ergebnisse.
camera { #declare point1 = <0.0.0>+WegSpline(clock); #declare point2 = <0.0.0>+WegSpline(clock+0.02); location point1 look_at < point2.x, point1.y, point2.z> }
Nun berechnet man 1000 Bilder, indem man Povray mit einer INI-Datei ähnlich wie dieser hier startet:
input_File_Name=haus.pov Output_File_Type=P Antialias = off Jitter = off Initial_Frame = 1 Final_Frame = 1000 Initial_Clock = 0.0 Final_Clock = 1.0
Und schon hat man die Platte voll (bzw. 1000 *.pnm-Bilder). Diese kann man mit ppmtompeg -no_frame_summary haus.par und folgender Parameterdatei in einen Film umwandeln:
PATTERN IBBPBBPBBPI FORCE_ENCODE_LAST_FRAME OUTPUT haus.mpg INPUT_DIR . INPUT haus*.ppm [0001-1000] END_INPUT BASE_FILE_FORMAT PNM INPUT_CONVERT * GOP_SIZE 10 PIXEL HALF IQSCALE 6 PQSCALE 6 BQSCALE 6 RANGE 2 PSEARCH_ALG LOGARITHMIC SLICES_PER_FRAME 5 BSEARCH_ALG SIMPLE REFERENCE_FRAME ORIGINAL ASPECT_RATIO 1.0 FRAME_RATE 23.976 BUFFER_SIZE 20
Download vom Film
Hier ist der Film: haus.mpg.