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