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