PovRay

Transkrypt

PovRay
Zajęcia z grafiki komputerowej – Pov Ray – część 4
Tworzenie animacji
Animacja tworzona jest poprzez wprowadzenie zmiennej clock. Zmienną tą można wprowadzić
wszędzie tam, gdzie może wystąpić ruch. Zmienna przyjmuje wartości z przedziału [0,1].
#include "colors.inc"
background { color Cyan }
camera {
location <0, 2, -3>
look_at <0, 1, 2>
}
box {
<-1, 0,
-1>, // lewy dolny rog
< 1, 0.5, 3>
// prawy gorny rog
texture {
T_Stone25
scale 4
}
rotate <0,20*clock,0>
//zmienna clock
}
light_source { <2, 4, -3> color White}
Następnie, w wierszu poleceń programu PovRay należy wpisać parametry: -j +kff5, przy czym 5 to
liczba klatek animacji. Można wpisać dowolną wartość. Dla 5 klatek zmienna clock przyjmie 5
wartości: 0, 0.25, 0.5, 0.75, 1.
Poniżej zaprezentowano bardziej zaawansowany przykład. Złożenie obrotu i przesunięcia daje efekt
toczenia kuli.
#include "colors.inc"
camera {
location <0, 3, -6>
look_at <0, 0, 0>
}
light_source { <20, 20, -20> color White }
plane {
y, 0
pigment { checker color White color Black }
}
sphere {
<0, 0, 0> , 1
pigment {
gradient x
color_map {
[0.0 Blue ]
[0.5 Blue ]
[0.5 White ]
[1.0 White ]
}
scale 0.25
}
rotate <0, 0, -clock*360>
translate <-pi, 1, 0>
translate <2*pi*clock, 0, 0>
}
Animacja złożona
Aby utworzyć animację złożoną z kilku etapów wprowadzamy instrukcję if..else.
#if ( clock <= 1 )
//pierwszy etap animacji
sphere { <0, 0, 0> , 1
pigment {
gradient x
color_map {
[0.0 Blue ]
[0.5 Blue ]
[0.5 White ]
[1.0 White ]
}
scale 0.25
}
rotate <0, 0, -clock*360>
translate <-pi, 1, 0>
translate <2*pi*clock, 0, 0>
}
#else
// (if clock > 1, zaczynamy drugi etap animacji)
// ale chcemy dalej pracowac w zakresie [0,1] dla zmiennej clock
// dlatego utworzymy zmienna zalezna od clock
#declare drugiClock = clock - 1; //znow wystartujemy od 0
sphere { <0, 0, 0> , 1
pigment {
gradient x
color_map {
[0.0 Blue ]
[0.5 Blue ]
[0.5 White ]
[1.0 White ]
}
scale 0.25
}
rotate <0, 0, drugiClock*360>
translate <-2*pi*drugiClock, 0, 0>
rotate <0, 45, 0>
translate <pi, 1, 0>
}
#end
Animacja tekstury
Animować można również tekstury obiektów. Służy do tego polecenie phase. Czasem sama animacja
tekstury daje wrażenie ruchu obiektu.
#include "colors.inc"
#include "textures.inc"
background { rgb<0.8, 0.8, 0.8> }
camera {
location <1.5, 1, -30>
look_at <0, 1, 0>
angle 10
}
light_source { <-100, 20, -100> color White }
// flaga
polygon {
5, <0, 0>, <0, 1>, <1, 1>, <1, 0>, <0, 0>
pigment { Blue }
normal {
gradient x
phase clock //instrukcja powodujaca animacje (przesuniecie) tekstury
scale <0.2, 1, 1>
sine_wave
}
scale <3, 2, 1>
translate <-1.5, 0, 0>
}
// maszt
cylinder {
<-1.5, -4, 0>, <-1.5, 2.25, 0>, 0.05
texture { Silver_Metal }
}
// zakonczenie masztu
sphere {
<-1.5, 2.25, 0>, 0.1
texture { Silver_Metal }
}
Informacje dodatkowe
Jeśli z jakiegoś powodu chcemy wyrenderować tylko pewien fragment animacji (który np. nam się nie
udał i chcemy go poprawić), nie musimy generować całej animacji od początku. Możemy
wyrenderować tylko interesujący nas fragment. W tym celu w pliku INI wpisujemy następujące
komendy:
Subset_Start_Frame = 51
Subset_End_Frame = 75
Wtedy animacja zostanie wyrenderowana od klatki numer 51 do 75.
W ramach ćwiczeń należy stworzyć animację biegnącego psa. Dla ułatwienia projekt można wykonać
w dwóch krokach: najpierw tworzymy tylko ruch łap, następnie nakładamy polecenie translate dla
całego psa machającego już łapami.
Więcej informacji można znaleźć w dokumentacji PovRaya: http://www.povray.org/documentation/3.7.0/t2_3.html#t2_3_9

Podobne dokumenty