Grafika inżynierska 2
Wojciech Palacz
WFAIS UJ
semestr letni 2007/2008 r.
Sterowanie kamerą w POV-Ray’u
Za orientację przestrzenną kamery odpowiadają trzy parametry:
I
location – zajmowana pozycja;
I
sky – kierunek „w górę”, domyślnie <0, 1, 0>;
I
look_at – punkt, na który zostanie skierowana (najpierw
obrót w lewo/prawo, potem przechylenie w górę/dół).
Kolejność podawania parametrów jest istotna!
Sterowanie kamerą w POV-Ray’u
Sterowanie kamerą w POV-Ray’u
Wektory right oraz up określają rozmiar wirtualnej kliszy;
domyślne wartości to <1.33, 0, 0>, <0, 1, 0>.
Ilość pikseli w poziomie i pionie reguluje się przełącznikami (np.
povray -w800 -h600 scena.pov).
Wektor direction musi być prostopadły do kliszy; jego długość
pozwala wyliczyć angle (i na odwrót).
Domyślnie ok. 67 stopni; zmniejszając angle dokonujemy zbliżenia
na wybrany punkt sceny.
Aspect ratio
Stosunek szerokości ekranu do jego wysokości (obliczany na
podstawie wymiarów w centymetrach, nie pikselach).
Stare telewizory i monitory komputerowe mają ratio 4:3, czyli
1,33:1. Dla standardowych rozdzielczości 640x480, 800x600
i 1024x768 (też 4:3) oznaczało to kwadratowe piksele. Nowsze
panele LCD o natywnej rozdzielczości 1280x1024 i kwadratowych
pikselach będą mieć z konieczności ratio 5:4 (1,25:1). Urządzenia
o prostokątnych pikselach też się trafiają.
Trzeba uważać aby kwadrat pozostał kwadratem podczas
wyświetlania na innym urządzeniu niż oryginalne.
Typy kamer
Zmieniając algorytm odwzorowywania punktów 3D na
dwuwymiarową płaszczyznę otrzymujemy różne typy kamer.
Odpowiednie słowa kluczowe to:
I
perspective – typ domyślny, kąt widzenia nie może
przekroczyć 180 stopni;
I
orthographic – rzut równoległy (promienie zbiegają się
w punkcie w nieskończoności);
I
panoramic – dla zdjęć szerokokątnych, stara się niwelować
zaburzenia perspektywy na krawędziach;
Typy kamer
I
fisheye – rzut sferyczny na powierzchnię koła, angle
zazwyczaj jest równe 180;
I
ultra_wide_angle – podobne do fisheye, ale rzutuje na
prostokąt;
I
spherical – też rzut sferyczny, można niezależnie ustawić
kąt widzenia w poziomie i pionie;
I
cylinder podtyp – rzut cylindryczny na powierznię walca;
I
omnimax – do przygotowywania filmów wyświetlanych
w kinach IMAX.
Krzywe dwuwymiarowe
Zadanie: zapisać krzywą w komputerze. Ale jak?
1.
Aproksymując odcinkami. Wady: nigdy nie będzie gładkie,
potrzeba dużo pamięci na współrzędne punktów.
2.
Jako funkcję matematyczną, y = f (x ) dla pewnego zakresu
wartości x . Wada zasadnicza: nie wszystkie krzywe są
funkcjami.
3.
Jako dwie funcje, x = f
x
(t) oraz y = f
y
(t) dla t ∈ [0, 1].
Zamiast dowolnych funkcji wymiernych przyjmuje się jakąś
określoną rodzinę, np. wielomiany kwadratowe albo sześcienne.
Krzywe parametryczne stopnia trzeciego
Niech x = a
x
t
3
+ b
x
t
2
+ c
x
t + d
x
oraz y = a
y
t
3
+ b
y
t
2
+ c
y
t + d
y
.
Współczynniki wielomianów można zapisać w macierzy:
C =
a
x
a
y
b
x
b
y
c
x
c
y
d
x
d
y
Wzór na krzywą Q można wtedy wyrazić jako Q(t) = TC , gdzie
T =
t
3
t
2
t
1
t
0
.
Krzywe w praktyce
Żaden grafik nie będzie chciał pracować bezpośrednio z macierzą
współczynników. Potrzebny jest inny sposób zadawania kształtu
krzywej, najlepiej przez przesuwanie myszką punktów po ekranie.
Dwa powszechnie znane sposoby:
I
krzywe Hermite’a;
I
krzywe Beziera.
Krzywe Hermite’a
Krzywą wyznaczają dwa punkty końcowe i dwa wektory styczne.
Krzywe Hermite’a
Krzywe Beziera
Wyznaczane czterema punktami – dwa na końcach krzywej i dwa
wyznaczające kierunki stycznych.
Każda krzywa zawiera się wewnątrz czworokąta opisanego na jej
punktach sterujących.
Ciągłość krzywych sklejanych
Skomplikowane krzywe dzieli się na małe fragmenty i każdy z nich
przybliża przy pomocy krzywej trzeciego stopnia. Dostajemy zbiór
krzywych Q
1
, Q
2
, Q
3
, itd. Segmenty te oczywiście muszą się
stykać, ale czasem wymagamy czegoś więcej w punktach łączeń:
I
ciągłość C
0
– po prostu się łączą;
I
ciągłość C
1
– zgadza się kierunek stycznych (czyli pierwsza
pochodna);
I
ciągłość C
2
– zgadza się druga pochodna.
Ręczne składanie krzywych Beziera czy Hermite’a nie gwarantuje
ciągłości pochodnych na łączeniach.
Krzywe B-sklejane
Krzywe te, znane też jako B-splajny (B-spline), mają:
I
n + 1 punktów kontrolnych p
0
, p
1
, . . . p
n
;
I
cała krzywa zaczyna się w p
0
i kończy w p
n
;
I
n − 2 krzywych Beziera Q
3
, Q
4
, . . . Q
n
;
I
parametry dla krzywych Beziera są tak wyliczane, aby mieć
ciągłość C
0
, C
1
oraz C
2
;
I
na krzywą Q
i
wpływają punkty p
i −3
, p
i −2
, p
i −1
, p
i
;
I
co za tym idzie, przesunięcie jednego z punktów kontrolnych
ma efekty tylko lokalne.
Krzywe B-sklejane
B-splines unplugged
B-splines unplugged
Bryły obrotowe
Rysujemy krzywą na płaszczyźnie XY, obracamy wokół osi Y,
i dostajemy trójwymiarową bryłę.
W POV-Ray’u mamy do dyspozycji bryły sor oraz lathe (ta
pierwsza szybciej się liczy, ta druga potrafi więcej wyrazić).
lathe {
typ krzywej
ilość punktów
dwuwymiarowe współrzędne punktów
tekstura, przekształcenia, itp.
}
Bryły obrotowe
Typy krzywych:
I
linear_spline – aproksymacja odcinkami;
I
quadratic_spline – aproksymacja krzywymi drugiego
rzędu, rysowanie zacznie się od drugiego punktu;
I
cubic_spline – aproksymacja segmentami trzeciego rzędu,
sklejana krzywa zaczyna się od drugiego punktu i kończy w
przedostatnim;
I
bezier_spline – tradycyjnie definiowane krzywe Beziera, po
cztery punkty na każdy segment.
Bryły „wyciskane”
Rysujemy zamknięte krzywe na płaszczyźnie XZ, a następnie
wyciągamy w pionie, od y
1
do y
2
.
Ściany mogą być pionowe (linear_sweep), lub mogą zbiegać się
do punktu <0, 0, 0> (conic_sweep).
prism {
typ krzywych
y1, y2
ilość punktów
dwuwymiarowe współrzędne punktów
}
Krzywe muszą być zamknięte (tzn. współrzędne ostatniego
rysowanego punktu równe pierwszemu). Po zamknięciu jednej
krzywej można zacząć specyfikować następną.
Krzywe w trzech wymiarach
Przykładem wykorzystania krzywych 3D jest obiekt
sphere_sweep. Przesuwa on sferę po zadanej krzywej, tworząc
w ten sposób pręty.
Dostępne typy interpolacji pomiędzy zadanymi punktami:
linear_spline, cubic_spline, b_spline.