POV-Ray 4 - Uniwersytet Śląski
Transkrypt
POV-Ray 4 - Uniwersytet Śląski
Podstawy POV-Ray’a Diana Domańska Uniwersytet Śląski Zmienne Do definiowania zmiennych służą dwie instrukcje 1 2 #declare nazwa1 = wartosc1; #local nazwa2 = wartosc2; Różnica jest taka, że declare definiuje zmienną globalną, a local zmienną lokalną (widoczna jest jedynie w pliku/funkcji, w którym ją utworzono). Zmienne Do definiowania zmiennych służą dwie instrukcje 1 2 #declare nazwa1 = wartosc1; #local nazwa2 = wartosc2; Różnica jest taka, że declare definiuje zmienną globalną, a local zmienną lokalną (widoczna jest jedynie w pliku/funkcji, w którym ją utworzono). Operatory arytmetyczne: +, -, *, /. Zmienne Do definiowania zmiennych służą dwie instrukcje 1 2 #declare nazwa1 = wartosc1; #local nazwa2 = wartosc2; Różnica jest taka, że declare definiuje zmienną globalną, a local zmienną lokalną (widoczna jest jedynie w pliku/funkcji, w którym ją utworzono). Operatory arytmetyczne: Wbudowane stałe: +, -, *, /. pi, true, false, yes, no, on, off. Instrukcja warunkowa Od wersji 3.7 1 1 2 3 #if ( warunek ) // polecenia #end 2 3 4 5 #if ( warunek ) // polecenia #else // polecenia #end 1 2 3 4 5 6 7 #if ( war1 ) // polecenia #elseif ( war2 ) // polecenia #else // polecenia #end Instrukcja warunkowa Od wersji 3.7 1 1 2 3 #if ( warunek ) // polecenia #end 2 3 4 5 #if ( warunek ) // polecenia #else // polecenia #end 1 2 3 4 5 6 7 Operatory logiczne: &, |, !. Operatory porównania: <, <=, =, !=, >=, > #if ( war1 ) // polecenia #elseif ( war2 ) // polecenia #else // polecenia #end Pętle 1 2 3 #while ( warunek ) // polecenia #end Od wersji 3.7 dostępna jest również pętla 1 2 3 for #for ( identyfikator, start, koniec [, krok] ) // polecenia #end Tablice Deklaracja tablicy 1 #declare tab_name = array[r1][r2]...; Tablice Deklaracja tablicy 1 #declare tab_name = array[r1][r2]...; Deklaracja tablicy z jednoczesną inicjalizacją 1 2 #declare tab1 = array[3]{1, 2, 3}; #declare tab2 = array[2][3]{{1, 2, 3}, {4, 5, 6}}; Tablice Deklaracja tablicy 1 #declare tab_name = array[r1][r2]...; Deklaracja tablicy z jednoczesną inicjalizacją 1 2 #declare tab1 = array[3]{1, 2, 3}; #declare tab2 = array[2][3]{{1, 2, 3}, {4, 5, 6}}; Indeksowanie elementów zaczyna się od 0. Tablice Deklaracja tablicy 1 #declare tab_name = array[r1][r2]...; Deklaracja tablicy z jednoczesną inicjalizacją 1 2 #declare tab1 = array[3]{1, 2, 3}; #declare tab2 = array[2][3]{{1, 2, 3}, {4, 5, 6}}; Indeksowanie elementów zaczyna się od 0. Odczytywanie elementu: tab1[1], tab2[1][2]. Tablice Deklaracja tablicy 1 #declare tab_name = array[r1][r2]...; Deklaracja tablicy z jednoczesną inicjalizacją 1 2 #declare tab1 = array[3]{1, 2, 3}; #declare tab2 = array[2][3]{{1, 2, 3}, {4, 5, 6}}; Indeksowanie elementów zaczyna się od 0. Odczytywanie elementu: tab1[1], tab2[1][2]. Zapis wartości do tablicy 1 #declare tab_name[1] = pigment{White}; Makra Definiowanie własnego makra 1 2 3 #macro nazwa (param1, param2, ... ) // polecenia #end Makra Definiowanie własnego makra 1 2 3 #macro nazwa (param1, param2, ... ) // polecenia #end W przypadku gdy wewnątrz makra będzie tworzona „rzecz”, np. obiekt, tekstura, to makro będzie się zachowywać jak funkcja zwracająca pojedynczą wartość (ten obiekt). Makra Definiowanie własnego makra 1 2 3 #macro nazwa (param1, param2, ... ) // polecenia #end W przypadku gdy wewnątrz makra będzie tworzona „rzecz”, np. obiekt, tekstura, to makro będzie się zachowywać jak funkcja zwracająca pojedynczą wartość (ten obiekt). Drugim sposobem zwracania wartości jest zwracanie przez parametr, np. 1 2 3 #macro test (x, w) #declare w = x * x; #end W POV-Ray istnieje wiele zdefiniowanych i użytecznych funkcji, np. 1 2 3 4 5 6 7 8 9 10 11 12 abs(A) mod(A, B) div(A, B) pow(A, B) log(A) exp(A) floor(A) ceil(A) rand(I) seed(I) sin(A) cos(A) // // // // // // // // // // // // modul modulo dzielenie calkowite potegowanie logarytm o podstawie 10 funkcja ekspotencjalna podloga sufit zwraca liczbe pseudolosowa z [0,1] ustawia ziarno generatora pseudolosowego sinus cosinus Pełną listę dostępnych funkcji można znaleźć w dokumentacji POV-Ray’a. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 #include "colors.inc" #include "textures.inc" camera { location <0, 1, -5> look_at <0, 0, 0> } light_source {<5, 5, -10> White} #declare tex_tab = array[4]{ texture{Lightning2}, texture{Blood_Marble}, texture{PinkAlabaster}, texture{EMBWood1}}; #declare i = 0; #while( i < 4 ) sphere{ <-2, 1.5, 0>, 0.6 texture{tex_tab[i]} translate <i + 0.5, -i, 0> } #declare i = i + 1; #end