8.5. Algorytm kolejnego dzielenia



Podobne dokumenty
Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

Oświetlenie obiektów 3D

Animowana grafika 3D. Opracowanie: J. Kęsik.

MODELE KOLORÓW. Przygotował: Robert Bednarz

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Pojęcie Barwy. Grafika Komputerowa modele kolorów. Terminologia BARWY W GRAFICE KOMPUTEROWEJ. Marek Pudełko

PODSTAWY BARWY, PIGMENTY CERAMICZNE

Grafika komputerowa Wykład 10 Modelowanie oświetlenia

GEOMETRIA PRZESTRZENNA (STEREOMETRIA)

GRAKO: ŚWIATŁO I CIENIE. Modele barw. Trochę fizyki percepcji światła. OŚWIETLENIE: elementy istotne w projektowaniu

STEREOMETRIA CZYLI GEOMETRIA W 3 WYMIARACH

Teoria światła i barwy

Fotometria i kolorymetria

WYKŁAD 11. Kolor. fiolet, indygo, niebieski, zielony, żółty, pomarańczowy, czerwony

1. Podstawowe algorytmy techniki rastrowe a) dwa przecinające się odcinki mogą nie mieć wspólnego piksela (T) b) odcinek o współrzędnych końcowych

GRAFIKA RASTROWA GRAFIKA RASTROWA

Grafika komputerowa. Dla DSI II

Animowana grafika 3D. Opracowanie: J. Kęsik.

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

Fotometria i kolorymetria

Trójwymiarowa grafika komputerowa rzutowanie

WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

GRK 4. dr Wojciech Palubicki

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza

Optyka stanowi dział fizyki, który zajmuje się światłem (także promieniowaniem niewidzialnym dla ludzkiego oka).

VII. WYKRESY Wprowadzenie

1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający

VIII. USUWANIE NIEWIDOCZNYCH LINII I POWIERZCHNI

gdzie (4.20) (4.21) 4.3. Rzut równoległy

Ustawienia materiałów i tekstur w programie KD Max. MTPARTNER S.C.

9. Podstawowe narzędzia matematyczne analiz przestrzennych

Polecenie ŚWIATPUNKT - ŚWIATŁO PUNKTOWE

Grafika 3D program POV-Ray - 1 -

Do opisu kolorów używanych w grafice cyfrowej śluzą modele barw.

Grafika komputerowa Wykład 9 Algorytmy wyznaczania obiektów zasłonietych

Przewodnik po soczewkach

GEOMETRIA ELEMENTARNA

Co należy zauważyć Rzuty punktu leżą na jednej prostej do osi rzutów x 12, którą nazywamy prostą odnoszącą Wysokość punktu jest odległością rzutu

1. Prymitywy graficzne

I. PROMIENIOWANIE CIEPLNE

Laboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny

3. Macierze i Układy Równań Liniowych

V Konkurs Matematyczny Politechniki Białostockiej

LUBELSKA PRÓBA PRZED MATURĄ 09 MARCA Kartoteka testu. Maksymalna liczba punktów. Nr zad. Matematyka dla klasy 3 poziom podstawowy

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 1

Dzień dobry. Miejsce: IFE - Centrum Kształcenia Międzynarodowego PŁ, ul. Żwirki 36, sala nr 7

Temat: Kolorowanie i przedstawianie zespolonej funkcji falowej w przestrzeni RGB

3.3. dwie płaszczyzny równoległe do siebie α β Dwie płaszczyzny równoległe do siebie mają ślady równoległe do siebie

Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

Grafika komputerowa Wykład 8 Modelowanie obiektów graficznych cz. II

Wektory, układ współrzędnych

PLANIMETRIA CZYLI GEOMETRIA PŁASZCZYZNY CZ. 3

Tajemnice koloru, część 1

RZUTOWANIE PROSTOKĄTNE

Akwizycja obrazów. Zagadnienia wstępne

Tomasz Tobiasz PLAN WYNIKOWY (zakres podstawowy)

Przekształcanie wykresów.

Z ostatniego wzoru i zależności (3.20) można obliczyć n6. Otrzymujemy (3.23) 3.5. Transformacje geometryczne

Podstawy fizyki wykład 8

w jednym kwadrat ziemia powietrze równoboczny pięciobok

Algorytm SAT. Marek Zając Zabrania się rozpowszechniania całości lub fragmentów niniejszego tekstu bez podania nazwiska jego autora.

WYMAGANIA EDUKACYJNE Z MATEMATYKI 2016/2017 (zakres podstawowy) klasa 3abc

IX Olimpiada Matematyczna Gimnazjalistów

Wymagania edukacyjne z matematyki w klasie III gimnazjum

Definicja obrotu: Definicja elementów obrotu:

Klasa 1 technikum. Poniżej przedstawiony został podział wymagań na poszczególne oceny szkolne:

1. Potęgi. Logarytmy. Funkcja wykładnicza

Funkcje liniowe i wieloliniowe w praktyce szkolnej. Opracowanie : mgr inż. Renata Rzepińska

Definicja i własności wartości bezwzględnej.

Grafika komputerowa. Model oświetlenia. emisja światła przez źródła światła. interakcja światła z powierzchnią. absorbcja światła przez sensor

Zbiór zadań z geometrii przestrzennej. Michał Kieza

Laboratorium Grafiki Komputerowej Przekształcenia na modelach barw

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Stereometria bryły. Wielościany. Wielościany foremne

Grafika komputerowa Tekstury

PODSTAWOWE KONSTRUKCJE GEOMETRYCZNE

Arkusz maturalny nr 2 poziom podstawowy ZADANIA ZAMKNIĘTE. Rozwiązania. Wartość bezwzględna jest odległością na osi liczbowej.

str 1 WYMAGANIA EDUKACYJNE ( ) - matematyka - poziom podstawowy Dariusz Drabczyk

Białość oznaczana jednostką CIE, oznacza wzrokowy odbiór białego papieru, do którego produkcji wykorzystano (lub nie) wybielacze optyczne (czyli

Własności optyczne materii. Jak zachowuje się światło w zetknięciu z materią?

I semestr WYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA VI. Wymagania na ocenę dopuszczającą. Dział programu: Liczby naturalne

Regionalne Koło Matematyczne

Ćwiczenia z Geometrii I, czerwiec 2006 r.

WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY MATEMATYKA KLASA 8 DZIAŁ 1. LICZBY I DZIAŁANIA

OPISY PRZESTRZENNE I PRZEKSZTAŁCENIA

Sponsorem wydruku schematu odpowiedzi jest wydawnictwo

1 Układy równań liniowych

Politechnika Warszawska Wydział Mechatroniki Instytut Automatyki i Robotyki

6. FUNKCJE. f: X Y, y = f(x).

Notatki przygotowawcze dotyczące inwersji na warsztaty O geometrii nieeuklidesowej hiperbolicznej Wrocław, grudzień 2013

Pytania do spr / Własności figur (płaskich i przestrzennych) (waga: 0,5 lub 0,3)

Plan wykładu. Akcelerator 3D Potok graficzny

WYMAGANIA KONIECZNE - OCENA DOPUSZCZAJĄCA:

I. Potęgi. Logarytmy. Funkcja wykładnicza.

V. WYMAGANIA EGZAMINACYJNE

Modele i przestrzenie koloru

Janusz Ganczarski CIE XYZ

Zadania domowe. Ćwiczenie 2. Rysowanie obiektów 2-D przy pomocy tworów pierwotnych biblioteki graficznej OpenGL

Marcin Wilczewski Politechnika Gdańska, 2013/14

Układy równań i nierówności liniowych

Transkrypt:

8.5. Algorytm kolejnego dzielenia 157 2. Znajdź wszystkie wielokąty Q (poprzedzające wielokąt P w liście), których z-rozpiętości mają części wspólne z z-rozpiętością wielokąta P (test 0). Jeśli takie wielokąty nie istnieją, oznacza to, że wielokąt P nie zasłania żadnego innego wielokąta. W takim przypadku rysujemy (i wypełniamy) rzut wielokąta P, usuwamy go z listy i powtarzamy p. 2. 3. Dla każdego wielokąta Q wykonaj kolejno testy 1 5 a) Jeśli któryś z testów zakończył się pomyślnie dla każdego wielokąta Q, oznacza to, że wielokąt P nie zasłania żadnego z nich. Możemy narysować (i wypełnić) jego rzut, a następnie usunąć go z listy i powtórzyć p. 2. b) Gdy któryś z testów nie wypadł pomyślnie dla wielokąta Q, zamień miejscami na liście wielokąty P i Q oraz oznacz wielokąt Q jako wymieniony. Jeżeli wielokąt Q jest już oznaczony jako wymieniony, to użyj płaszczyznę zawierającą wielokąt P do podziału wielokąta Q na dwa wielokąty Q 1 i Q 2. Usuń wielokąt Q z listy i wstaw do niej wielokąty Q 1 i Q 2, zachowując na liście porządek względem rosnących wartości z max, po czym powtórz p. 2. W celu zredukowania nakładu obliczeń w p. 3 przed rozpoczęciem algorytmu można wykonać triangulację (podział na trójkąty) rozważanych wielokątów. 8.5. Algorytm kolejnego dzielenia W algorytmie kolejnego dzielenia, nazywanym też algorytmem podpodziału lub dzielenia na mniejsze części, wykonuje się rekurencyjnie dwa kroki. W pierwszym kroku wybiera się te wielokąty, których rzuty pokrywają dany obszar S na ekranie, a stąd są potencjalnie widoczne. Wybrane wielokąty poddaje się testom w celu rozstrzygnięcia, który z rzutów powinien być narysowany (i wypełniony) na ekranie. Jeśli podjęcie decyzji nie jest możliwe, to obszar S, który zwykle jest prostokątem, dzieli się na mniejsze części, w których powtarza się całą procedurę. Postępowanie to jest kontynuowane do chwili, gdy testy rozstrzygną o konieczności narysowania odpowiedniego rzutu lub gdy rozważany obszar ekranu zostanie zredukowany do pojedynczego piksela. Zwykle za obszar S przyjmuje się całą powierzchnię ekranu, a pierwszy podział polega na jego podzieleniu na cztery równe (z dokładnością do piksela) części. W kolejnych krokach każdą z tych części dzieli się znowu na cztery (zob. rys. 74) itd. Wielokąty składające się na obiekt mogą być podzielone na cztery kategorie na podstawie położenia ich rzutów względem rozważanego okna rzutowania S (zob. rys. 75). Wyróżniamy:! wielokąty otaczające, których rzuty całkowicie zawierają okno S,! wielokąty przecinające, których rzuty częściowo znajdują się w rozważanym oknie,! wielokąty zawarte w oknie S (rzuty tych wielokątów są całkowicie zawarte w rozważanym oknie rzutowania),! wielokąty rozłączne, których rzuty nie mają części wspólnej z obszarem S. Odpowiednia klasyfikacja wielokątów (składających się na obiekt) względem rozważanego okna rzutowania jest podstawą całego algorytmu kolejnego dzielenia. Dla danego obszaru należy bowiem utworzyć listę wielokątów potencjalnie widocznych (będziemy ją oznaczać przez LWPW) z wielokątów otaczających, przecinających i zawartych w tym oknie (wielokąty rozłączne w naturalny sposób nie mogą być wizualizowane w rozważanym obszarze). Zauważmy w tym miejscu, że po podziale okna rzutowania należy ponownie rozważyć i sklasyfikować tylko wielokąty, które przecinały lub były całkowicie zawarte w poprzednim oknie (wielokąty otacza-

158 VIII. Usuwanie niewidocznych linii i powierzchni Rys. 74. Podział ekranu w algorytmie kolejnego dzielenia Rys. 75. Różne położenia rzutu wielokąta względem rozważanego obszaru rzutowania jące i rozłączne pozostają takimi wielokątami w każdym następnym oknie). Wielokąty, które znajdują się z tyłu wielokąta otaczającego okno, są usuwane z listy LWPW. Na liście tej wielokąty powinny być posortowane względem wzrastających wartości z min współrzędnych wierzchołków najbliższych oknu widoczności (rzutowania). Dla każdego wielokąta S otaczającego okno należy ponadto zapamiętać jego największą współrzędną z, tj. z max (S). Gdy dla pewnego

8.6. Algorytm przedstawiania powierzchni matematycznych 159 wielokąta P jest spełniona nierówność z min (P) > z max (S), oznacza to, że jest on zasłonięty przez wielokąt S, a zatem powinien być usunięty z listy LWPW. Z uwagi na porządek listy należy z niej usunąć także wszystkie wielokąty następne. Algorytm kolejnego dzielenia można opisać w następujących punktach: 1. Przypisz obszarowi S całą powierzchnię ekranu. 2. Dla obszaru S utwórz listę LWPW posortowaną względem z min (najmniejszych wartości współrzędnych z wierzchołków wielokątów). Usuń z tej listy wielokąty przesłonięte przez wielokąty otaczające obszar S oraz wielokąty rozłączne z tym obszarem. 3. Wykonaj testy widoczności: a) Jeśli wszystkie wielokąty są rozłączne z obszarem S, przypisz wszystkim pikselom tego obszaru kolor tła. b) Gdy w liście znajduje się dokładnie jeden wielokąt i jest on wielokątem zawartym w oknie S, narysuj jego rzut i wypełnij go określonym kolorem, a pozostałym pikselom obszaru S przypisz kolor tła. c) Jeżeli lista LWPW zawiera tylko jeden wielokąt i jest on wielokątem otaczającym, przypisz wszystkim pikselom obszaru S kolor tego wielokąta. d) Jeśli wielokąt otaczający okno S jest wielokątem listy LWPW, który znajduje się najbliżej tego okna (a więc zasłania pozostałe wielokąty znajdujące się na liście), przypisz jego kolor wszystkim pikselom obszaru S. e) Gdy obszar S jest pojedynczym pikselem o współrzędnych (x, y) oraz testy a), b), c) i d) nie rozstrzygnęły o jego kolorze, oblicz współrzędną z(x, y) dla każdego wielokąta z listy LWPW (jak w algorytmie z buforem głębokości zob. p. 9.2) i przypisz pikselowi (x, y) kolor tego wielokąta, dla którego współrzędna ta jest najmniejsza. 4. Jeżeli nie wystąpił żaden z przypadków opisanych w p. 3, podziel obszar ekranu S na cztery części i dla każdej z nich powtórz algorytm od p. 2. 8.6. Algorytm przedstawiania powierzchni matematycznych Powierzchnie matematyczne opisane równaniem (8.5) gdzie (8.6) są zwykle przedstawiane za pomocą modeli siatkowych (zob. p. 6.2). Do usuwania w nich niewidocznych linii można wprawdzie zastosować algorytmy opisane w poprzednich punktach, ale podejście takie nie jest efektywne, gdyż nie uwzględnia własności takich powierzchni. Model siatkowy powierzchni matematycznej (8.5) otrzymuje się przez narysowanie krzywych przy ustalonych wartościach x, tj. krzywych o równaniach z ' f(const, y), oraz przy ustalonych wartościach y, czyli z ' f(x, const). Każda z tych krzywych jest linią łamaną. Wrażenie gładkości powierzchni uzyskuje się przez zastosowanie krótkich odcinków do narysowania poszczególnych łamanych. Sposób przedstawiania na ekranie powierzchni danej wzorem (8.5) opisaliśmy w p. 6.2. Przypomnijmy, że dla jej zobrazowania przyjmuje się zwykle układ współrzędnych o osi y skierowanej tak samo, jak oś x ekranu, osi z równoległej do osi y ekranu, ale przeciwnie skierowanej oraz

160 VIII. Usuwanie niewidocznych linii i powierzchni osi x wybranej w taki sposób, by układ Oxyz był układem prawoskrętnym. Przy zastosowaniu rzutu skośnego związek pomiędzy współrzędnymi w tym układzie i współrzędnymi ekranowymi jest określony wzorami (4.48). W celu usunięcia niewidocznych linii modelu siatkowego powierzchni określonej równaniem (8.5) załóżmy, że wykonujemy rzut równoległy na płaszczyznę yz, w którym wektor rzutowania nie jest równoległy do wektora [1, 0, 0]. Wykluczamy zatem trywialny przypadek rzutowania na płaszczyznę yz wzdłuż osi x (w przypadku stosowania wspomnianego bliżej rzutu skośnego warunek ten jest spełniony). Załóżmy ponadto, że po wykonaniu rzutu zamieniamy osie układu współrzędnych tak, by odpowiadały one osiom współrzędnych ekranu (por. p. 4.3). Niech P ij ' (x i, y i ), gdzie i ' 0, 1,..., n oraz j ' 0, 1,..., m, oznaczają punkty (na ekranie) będące wierzchołkami modelu siatkowego. Łamane brzegowe leżące z przodu są określone następującymi ciągami punktów: P 00 6 P 10 6... 6 P n0 oraz P 00 6 P 01 6... 6 P 0m. Łamane te nie są przesłonięte i od ich narysowania na ekranie zaczynamy tworzenie modelu siatkowego płata powierzchni. Jednocześnie z punktów tej łamanej konstruujemy listę początkowych poziomów widoczności w kierunku osi y. Lista ta, którą dalej będziemy oznaczać przez, określa górny (min) i dolny (max) poziom widoczności dla każdej kolumny pikseli w kierunku osi x. W kolejnych krokach algorytmu rysujemy łamane rzutu modelu siatkowego leżące dalej i bardziej z tyłu uaktualniając ciągle listę (zob. rys. 76). Na ekranie zaznaczamy tylko te fragmenty rzutów odcinków P ij P i, j%1 i P ij P i%1, j, które leżą powyżej górnego lub poniżej dolnego poziomu widoczności. Jeśli punkty P ij są tak dobrane, że dla ustalonego j przebiegają wszystkie piksele ekranu w kierunku osi x 1), to odcinki te są albo w całości widoczne, albo w całości niewidoczne. Widoczne będą wówczas, gdy oba ich końce będą widoczne. Z kolei o rozstrzygnięciu widoczności punktu o współrzędnych ekranowych (x, y) decyduje spełnienie jednej z nierówności (8.8) Rys. 76. Aktualizacja listy minimaksowej 1) W ogólnym sformułowaniu algorytmu założenie to nie jest konieczne. Jednak przy przyjęciu większych odległości w kierunku osi x pomiędzy kolejnymi punktami należy dodatkowo określać fragmenty widoczne i niewidoczne dla każdego odcinka.

8.6. Algorytm przedstawiania powierzchni matematycznych 161 Do uaktualniania poziomów widoczności, czyli listy, można zastosować zmodyfikowanę wersję algorytmu Bresenhama. W ogólności algorytm ten służy do rysowania na urządzeniu rastrowym odcinka łączącego dwa piksele: P 0 o współrzędnych (x 0, y 0 ) i P k o współrzędnych (x k, y k ). Rozważmy najpierw jego klasyczną postać. Załóżmy, że w lewoskrętnym układzie współrzędnych prostokątnych Oxy (a więc innym niż układ współrzędnych ekranu) spełniony jest warunek x 0 < x k, a kąt nachylenia rysowanego odcinka do osi x należy do przedziału (0, 45 ], czyli Rys. 77. Wybór pikseli w algorytmie Bresenhama Z uwagi na ograniczenie kąta nachylenia odcinka do przedziału (0, 45 ], po wyznaczeniu piksela P i ' (x i, y i ) następnym pikselem może być tylko S i%1 ' (x i %1, y i ) lub T i%1 ' (x i %1, y i %1) (zob. rys. 77). Zaznaczone na rysunku odległości s i t są określone wzorami Po odjęciu tych równości stronami i pomnożeniu przez )x otrzymujemy (8.9) Z założenia )x > 0, a więc znak ) i określa, która z odległości s i t jest większa. Jeżeli ) i > 0, oznacza to, że s > t, a więc za piksel P i%1 przyjmujemy piksel T i%1. Gdy ) i < 0, za piksel P i%1 przyjmujemy piksel S i%1. Wreszcie, gdy ) i ' 0, to odległości s i t są równe i za piksel P i%1 możemy przyjąć dowolny z pikseli S i%1 i T i%1 (w dalszym ciągu założymy, że wybranym pikselem jest T i%1 ). Z wzoru (8.9) wynika, że Odejmując stronami równanie (8.9) od (8.10) mamy (8.10)

162 VIII. Usuwanie niewidocznych linii i powierzchni skąd po uwzględnieniu, że x i%1 &x i ' 1 otrzymujemy (8.11) Gdy ) i $ 0, tzn. gdy wybieramy punkt T i%1, mamy y i%1 &y i ' 1 i zależność (8.11) sprowadza się do postaci Jeśli ) i < 0, tj. gdy wybieramy punkt S i%1, z zależności (8.11) mamy Z wzoru (8.8) możemy wyznaczyć wartość początkową ) 0 : Uwzględniając przyjęte założenia, algorytm Bresenhama wyboru pikseli przedstawiających odcinek P 0 P k zapisujemy następująco:! P 0 :' (x 0, y 0 ), )x :' x k & x 0, )y :' y k &y 0, p :' 2)y, d :' 2()y&)x), ) :' p& )x,! dla i ' 0, 1,..., x k &x 0 &1 powtarzaj następujące operacje: x i%1 :' x i %1, gdy ) $ 0, to ) :' )%d, y i%1 :' y i %1, w przeciwnym przypadku, tj. gdy ) < 0 ) :' )%p, y i%1 :' y i, P i%1 :' (x i%1, y i%1 ). Zauważmy, że w algorytmie tym wykonuje się tylko działania na liczbach całkowitych. W podobny sposób można wyprowadzić odpowiednie wzory i zapisać algorytm Bresenhama dla innych kątów nachylenia odcinka do osi x. Zastosowanie podanego algorytmu do aktualizacji listy w rozważanym zagadnieniu usuwania niewidocznych linii powierzchni danej wzorem (8.5) jest łatwe. Uproszczenia wynikają z faktu, że współrzędne x końców rysowanych odcinków nie będą różnić się więcej niż o jeden piksel oraz że odcinki będą rysowane w kierunku niemalejących wartości x, a więc konieczne do rozważenia kąty nachylenia będą zawarte w przedziale [&90, 90 ]. Wszystkie możliwe przypadki są przedstawione na rys. 78. 8.7. Algorytm dla bryły wypukłej zawierającej początek układu współrzędnych Bryłą wypukłą nazywamy figurę przestrzenną, w której każdy odcinek łączący jej dwa dowolne punkty leży całkowicie w jej wnętrzu. W przypadku wielościanów wypukłych bryła jest ograniczona wielokątnymi ścianami, przy czym żaden z kątów wewnętrznych pomiędzy nimi nie przekracza 180. Przykładami takich wielościanów mogą być bryły Platona: czworościan, sześcian, ośmiościan, dwunastościan i dwudziestościan.

8.7. Algorytm dla bryły wypukłej zawierającej początek układu 163 Rys. 78. Wybór pikseli do aktualizacji listy minimaksowej w algorytmie usuwania niewidocznych linii Załóżmy, że początek prostokątnego układu współrzędnych Oxyz leży wewnątrz rozważanego wielościanu wypukłego. Niech w tym układzie położeniem obserwatora będzie punkt o współrzędnych (0, 0, &d). Wówczas dowolna ściana może być widoczna wtedy i tylko wtedy, gdy płaszczyzna zawierająca tę ścianę przecina prostą łączącą położenie obserwatora z początkiem układu współrzędnych (punkt przecięcia leży na tej prostej pomiędzy punktami o współrzędnych (0, 0, &d) i (0, 0, 0)). Gdy punkt przecięcia leży na dodatniej półosi z lub za obserwatorem, tj. w punkcie (0, 0, z), gdzie z < &d, to dla bryły przezroczystej widzielibyśmy spód ściany. Mo-

164 VIII. Usuwanie niewidocznych linii i powierzchni żemy jednak widzieć krawędzie takiej ściany, gdyż mogą się one znajdować również na innej, widocznej ścianie. Niech l ij oznacza linię o numerze i ograniczającą ścianę o numerze j, a v lk wierzchołek o numerze l (l ' 1, 2) leżący na linii k (zakładamy, że linie ograniczające każdą ścianę są uporządkowane albo zgodnie z kierunkiem obrotu wskazówek zegara, albo przeciwnie do tego kierunku). Jeśli p ' l 1j i q ' l 2j oznaczają dwie linie ograniczające ścianę j, to wśród czterech wierzchołków v 1p, v 2p, v 1 q i v 2q są trzy punkty niewspółliniowe. Oznaczmy ich współrzędne przez (x i, y i, z i ) (i ' 1, 2, 3) i określmy równanie płaszczyzny zawierającej ścianę j: Porównując znak wartości f(0, 0, 0), tj. znak liczby D, ze znakiem wartości f(0, 0, &d), tj. ze znakiem wartości wyrażenia D&Cd, możemy rozstrzygnąć, czy początek układu współrzędnych i obserwator leżą po tej samej stronie płaszczyzny, a więc czy ściana będzie widoczna. Ściana jest bowiem widoczna wtedy i tylko wtedy, gdy wartość wyrażenia D& Cd ma znak przeciwny niż D. Podane obliczenia wykonujemy dla każdej ściany. Dla ścian widocznych ograniczające je krawędzie (odcinki o wierzchołkach v lk ) dołączamy do specjalnej listy (nazwijmy ją LK). W liście LK krawędź ograniczająca dwie ściany widoczne pojawi się dwukrotnie. Po usunięciu krawędzi powtarzających się możemy narysować wszystkie widoczne krawędzie wielościanu. Przedstawiony algorytm nie jest skomplikowany i może być zastosowany także w przypadku ogólniejszym gdy obserwator znajduje się w punkcie o współrzędnych (a, b, c), przy czym a 2 %b 2 %c 2 > 0 (wykluczamy położenie obserwatora w początku układu współrzędnych). Wystarczy wówczas wykonać najpierw obrót układu współrzędnych o kąt n wokół osi z (zob. wzory (3.4), przy czym (8.12) (a 2 %b 2 > 0), a następnie powstały układ współrzędnych obrócić o kąt 180 &" wokół osi (zob. wzory (3.7), przy czym (8.13) Uwzględniając zależności (3.4), (8.12), (3.7) i (8.13) całe przekształcenie układu Oxyz do układu możemy zapisać następująco:

8.7. Algorytm dla bryły wypukłej zawierającej początek układu 165 Jeśli a 2 %b 2 = 0 i c > 0, czyli gdy obserwator znajduje się na dodatniej półosi z, to wykonujemy przekształcenie (obrót układu współrzędnych o 180 wokół osi y)

IX. CIENIOWANIE 9.1. Źródła światła i odbicia Tworzenie realistycznych obrazów obiektów rzeczywistych wymaga nie tylko zastosowania rzutów perspektywicznych oraz wyeliminowania niewidocznych linii i powierzchni, ale także uwzględnienia ich oświetlenia, koloru i tekstury, tj. mikrostruktury powierzchni obiektów. Podstawowe trudności związane z modelowaniem tych elementów wynikają z konieczności wykonania bardzo wielu obliczeń. Postrzeganie obiektów rzeczywistych wynika z odbierania przez oko światła emitowanego przez te obiekty lub odbitego od ich powierzchni. Natężenie (intensywność) światła odbitego od powierzchni zależy od źródeł światła, które ją oświetlają, oraz od własności samej powierzchni. Źródła światła możemy podzielić na:! punktowe, gdy ich rozmiar jest mały w stosunku do oglądanego przedmiotu lub gdy odległość od nich jest duża (np. Słońce lub pojedyncza żarówka w hali sportowej),! liniowe (np. długa lampa jarzeniowa oświetlająca pokój). W dalszym ciągu będziemy rozważać jedynie punktowe źródła światła. W najprostszym przypadku modelowania występuje tylko jedno takie źródło. Własności powierzchni obiektu powodują różne odbicia światła. Światło odbite dzielimy na:! rozproszone, gdy światło odbija się od powierzchni równomiernie we wszystkich kierunkach,! kierunkowe (zwierciadlane), gdy światło odbija się w jednym kierunku. Przykładem odbić rozproszonych może być odbijanie promieni słonecznych przez białą kartkę papieru lub czarną tablicę szkolną. Obie powierzchnie są matowe, a występujące różnice w odbijaniu promieni są tylko ilościowe (kartka papieru odbija znacznie więcej światła niż tablica, która pochłania dużą część energii padającego promieniowania). Odbicia kierunkowe występują na przykład przy oglądaniu gładkich, wypolerowanych przedmiotów metalowych. Jeśli spojrzymy na taki przedmiot pod odpowiednim kątem, to zauważymy odblask (jasną plamę w kolorze padającego światła), podczas gdy oglądając ten przedmiot z innego kierunku stwierdzimy, że jest on ciemny. Promienie świetlne odbijane od licznych powierzchni i przenikające niektóre z nich powodują wytworzenie w pewnym otoczeniu jednorodnego tła oświetleniowego, zwanego światłem otoczenia. Światło to sprawia, że widoczne są przedmioty, które same ani nie emitują światła (nie są źródłami światła), ani nie są bezpośrednio oświetlone.

9.2. Modelowanie oświetlenia model Phonga 167 9.2. Modelowanie oświetlenia model Phonga Prostym modelem opisującym sposób interakcji promieni świetlnych z powierzchnią, będącym zarazem kompromisem pomiędzy wynikami, które można zaakceptować i efektywnością obliczeń, jest model Phonga. Model oświetlenia może być wyrażony za pomocą równania oświetlenia, które przedstawia natężenie światła dla współrzędnych punktu na cieniowanym obiekcie. W modelu Phonga łączne natężenie światła jest przedstawiane za pomocą natężeń składowych, które wynikają z refleksji rozproszonych i kierunkowych oraz natężenia światła otoczenia. Nie uwzględnia się w nim absorpcji (pochłaniania) światła oraz jego rozproszenia i emisji z wnętrza obiektu, czyli zjawiska fluorescencji. Dla bryły (ciała stałego) oczywistym równaniem jest (zob. rys. 79) światło padające na powierzchnię ' światło odbite % światło fluorescencyjne % światło pochłonięte % światło przeniesione (wychodzące) Rys. 79. Oddziaływanie promieni świetlnych z ciałem stałym W grafice komputerowej zwykle interesuje nas światło odbite i czasami przeniesione. Natężenie światła odbitego od powierzchni i długość jego fali (a więc barwa) zależą od długości fali padającej, kąta padania, chropowatości powierzchni i innych jej właściwości, jak przenikalności elektrycznej i przewodności właściwej. Modelowanie wszystkich tych elementów jest trudne. Okazuje się przy tym, że ta sama powierzchnia może zachowywać się jak powierzchnia gładka dla fal o pewnej długości i jak powierzchnia chropowata dla fal o innej długości. Podobne zachowanie można stwierdzić dla różnych kątów padania światła o tej samej długości

168 IX. Cieniowanie fali. Ponadto empirycznie stwierdzono, że bez względu na chropowatość powierzchni, przy małych kątach padania promieni świetlnych występuje zawsze odbicie kierunkowe. W ogólności do opisu odbić można zdefiniować funkcję R(N in, 2 in, N out, 2 out ), której argumentami są kierunki N i 2 (we współrzędnych sferycznych) padania i odbicia promienia świetlnego. W modelu Phonga pomija się zależność kierunkową i rozważa się jedynie kąty padania i odbicia. Gdyby nie było zewnętrznych źródeł światła, to przedstawiany obiekt byłby wyświetlany z charakterystycznym dla niego natężeniem k 0 : (9.1) Ponieważ we wzorze (9.1) nie występują żadne wyrazy, które zależą od położenia cieniowanego punktu, więc dla całego obiektu równanie oświetlenia, czyli (9.1), wystarczy obliczyć tylko raz. Zauważmy, że równanie (9.1) jest w pełni wystarczające do opisu oświetlenia obiektów samoświecących światłem monochromatycznym. Załóżmy teraz, że obiekt sam nie świeci, ale na jego wszystkie powierzchnie pada jednakowo ze wszystkich kierunków światło otoczenia. Równanie oświetlenia przyjmie wówczas postać (9.2) gdzie I o oznacza natężenie światła otoczenia, a k o współczynnik odbicia światła rozproszonego (k o 0 [0, 1]), który zależy od właściwości materiału tworzącego poszczególne powierzchnie i długości fali padającego światła. Gdy wszystkie powierzchnie obiektu mają ten sam współczynnik k o, a więc gdy obiekt jest bryłą jednolitą, to natężenie I z zależności (9.2) wystarczy obliczyć tylko raz. Oznacza to, że jednolite obiekty oświetlane światłem otoczenia świecą wprawdzie słabiej lub silniej (wprost proporcjonalnie do natężenia światła oświetlenia), ale są oświetlone jednolicie na całej powierzchni. Kolejnym krokiem rozbudowy modelu oświetlenia będzie przyjęcie założenia, że rozważany obiekt jest oświetlony przez punktowe źródło światła, którego promienie rozchodzą się jednakowo we wszystkich kierunkach. Jasność obiektu będzie się wówczas zmieniać od punktu do punktu, zależnie od kierunku i odległości od źródła światła. Na matowych powierzchniach występują odbicia rozproszone, które powodują, że powierzchnie te oglądane ze wszystkich kierunków obserwacji są tak samo jasne. Jeśli przez I p oznaczymy natężenie punktowego źródła światła, przez k r współczynnik odbicia rozproszonego (zależny od materiału i długości fali świetlnej), przy czym k r 0 [0, 1], a przez 2 oznaczymy kąt pomiędzy kierunkiem do obserwatora i normalną do powierzchni (2 0 [0, 90 ]), to równanie oświetlenia ma postać (9.3) Równanie (9.3) jest zapisem prawa Lamberta, które mówi, że natężenie światła odbitego od powierzchni elementarnej w kierunku obserwatora jest wprost proporcjonalne do kosinusa kąta pomiędzy kierunkiem do obserwatora i normalną do tej powierzchni. Innym zapisem tego równania jest (9.4) gdzie l oznacza wektor kierunku (znormalizowany) od źródła światła do rozpatrywanego punktu na powierzchni, n wektor normalny powierzchni w tym punkcie, a kropka oznacza iloczyn

9.2. Modelowanie oświetlenia model Phonga 169 skalarny. Zauważmy, że z powyższego równania oświetlenia natężenie I powinno być obliczone przed wykonaniem na wizualizowanym obiekcie innych przekształceń, które zmieniają wartość kąta 2. W szczególności dotyczy to rzutu perspektywicznego. Ostatnie równanie można uogólnić na przypadek, gdy powierzchnia jest oświetlana przez n punktowych źródeł światła. Wówczas (9.5) gdzie l i oznacza wektor kierunku od i-tego źródła światła do danego punktu na powierzchni. Z wzoru (9.4) wynika, że żadna z powierzchni równoległych do kierunku padania promieni świetlnych nie będzie oświetlona. Ponieważ nieoświetlonemu punktowi odpowiada zwykle na ekranie czarny piksel, przy czarnym tle powierzchnie (ściany) nieoświetlone nie byłyby w ogóle widoczne na ekranie i to bez względu na położenie obserwatora (innymi słowy: z powodu braku oświetlenia ściana widoczna z punktu położenia obserwatora stałaby się ścianą niewidoczną). W celu wyeliminowania takich przypadków dodajemy zwykle do prawej strony równania (9.4) (a także do równania (9.5)) światło oświetlenia, tj. prawą stronę równania (9.2), otrzymując równanie oświetlenia w postaci (9.6) Zastosowanie tego równania powoduje także uzyskanie bardziej realistycznego obrazu pozostałych ścian obiektu. Wyobraźmy sobie teraz dwie ściany obiektu o jednakowym kolorze i takim samym wektorze normalnym, które znajdują się w różnych odległościach od źródła światła. Po zastosowaniu do nich równania oświetlenia (9.6) stwierdzimy, że ściany te niczym nie różnią się (natężenie światła dla obu ścian będzie takie same). Dlatego do równania (9.6) wprowadza się współczynnik tłumienia f(d) źródła światła, który zależy od odległości d do niego: (9.7) Współczynnik tłumienia f, który powinien maleć wraz ze wzrostem odległości od źródła światła, jest definiowany różnie, np. gdzie c, c 1, c 2 i c 3 oznaczają stałe określane przez użytkownika. Ostatnia postać współczynnika f(d) jest szczególnie polecana, gdyż z jednej strony zapewnia jego zmniejszanie odwrotnie proporcjonalnie do kwadratu odległości, a z drugiej gwarantuje zawsze wystąpienie tłumienia (przez ograniczenie z góry przez 1). Ponadto wystąpienie w mianowniku stałej c 1 zapewnia, że nie będzie on zbyt mały, gdy źródło światła będzie bardzo blisko powierzchni. Rzeczywiste powierzchnie nie są doskonale matowe i dlatego oprócz odbić rozproszonych występują na nich odbicia kierunkowe. W przypadku idealnie gładkiej powierzchni promień

170 IX. Cieniowanie światła tworzący z normalną do powierzchni kąt h byłby odbity w taki sposób, że kąt pomiędzy promieniem odbitym i normalną wynosiłby także h. Odbicie takie, zwane odbiciem zwierciadlanym, byłoby widoczne tylko dla obserwatora znajdującego się w kierunku promienia odbitego. W rzeczywistości odbicie kierunkowe nie jest idealne i odbite światło jest widoczne z różnych kierunków bliskich kierunkowi odbicia zwierciadlanego. Obszar powierzchni, którego dotyczy odbicie kierunkowe jest jaśniejszy, a nierzadko może być obserwowany w zupełnie innym kolorze (np. zielona powierzchnia, na którą padają promienie światła białego będzie w dalszym ciągu zielona wskutek odbić rozproszonych, ale wskutek odbicia kierunkowego pewien jej obszar może być biały). Należy też dodać, że obszary odbić rozproszonych i kierunkowych mają inne kształty (zob. rys. 80). Rys. 80. Odbicia rozproszone (a) i kierunkowe (b) Rys. 81. Kierunki i kąty rozważane przy modelowaniu odbić kierunkowych W celu symulacji odbicia kierunkowego oznaczmy przez l wektor o kierunku do źródła światła, przez n wektor normalny do powierzchni, przez v kierunek do obserwatora, a przez N kąt pomiędzy kierunkami wektorów r i v (zob. rys. 81). W modelu Phonga odbicie kierunkowe opisuje się empirycznym wyrazem cos n N. Dla idealnego lustra przyjmuje się n ' 4. Na powierzchniach bardzo gładkich (wypolerowanych) obszar rozjaśniony przez odbicie kierunkowe jest mały, gdyż n jest duże. Chociaż obszar ten powiększa się na powierzchniach matowych, ale jego

9.2. Modelowanie oświetlenia model Phonga 171 intensywność maleje ze względu na występowanie odbić rozproszonych. Równanie oświetlenia z uwzględnieniem odbicia kierunkowego ma postać (9.8) gdzie k k oznacza współczynnik odbicia kierunkowego, który zwykle przyjmuje się jako zależny od materiału powierzchni. Złożoność obliczeniową równania (9.8), które powinno być obliczone dla każdego punktu rozpatrywanej powierzchni, można zmniejszyć przez wykonanie pewnej aproksymacji. Dotyczy ona zastąpienia iloczynu skalarnego r@v iloczynem n@h, gdzie h oznacza wektor normalny do hipotetycznej powierzchni, przy czym jego kierunek wyznacza równanie Można pokazać, że kąt pomiędzy wektorami r i v jest dwa razy większy od kąta pomiędzy wektorami n i h, ale wynikające stąd inne wartości dla odbicia kierunkowego można zniwelować przez dobór innej wartości n. Równanie oświetlenia zapisujemy zatem w postaci (9.9) Wynika stąd, że przy stałych wektorach l i v (a tym samym h) natężenie oświetlenia jest funkcją tylko jednego wektora wektora normalnego do powierzchni. Jeśli przyjmiemy, że źródło światła znajduje się w nieskończoności, to zaniedbując czynnik f(d) widzimy, że dla płaskiej powierzchni (o stałym wektorze n) nie wystąpią żadne zmiany natężenia oświetlenia. W takim przypadku równanie (9.9) może być obliczone tylko raz. Przy modelowaniu kolorowych obiektów rzeczywistych oświetlonych światłem białym przyjmujemy zwykle, że rozjaśnienia wynikające z odbić kierunkowych są białe, a kolory obiektów określamy na podstawie odpowiedniego doboru współczynników odbić rozproszonych. Dla trzech barw podstawowych (czerwonej, zielonej i niebieskiej) z równania (9.9) otrzymujemy trzy równania: gdzie I c, I z i I n oznaczają natężenia oświetlenia w barwie odpowiednio czerwonej, zielonej i niebieskiej. Zwróćmy uwagę, że człony związane z odbiciem kierunkowym są takie same we wszystkich trzech równaniach. Powyższe równania można zapisać za pomocą pojedynczego równania oświetlenia obowiązującego w modelu Phonga: (9.10) W przedstawionej wersji modelu Phonga uwzględnialiśmy tylko światło odbijane od powierzchni obiektów. W przypadku przedmiotów przezroczystych (lub częściowo przezroczystych) źródło światła może znajdować się za, a obserwator przed nimi, i przedmioty takie będą widoczne. Dokładne określenie natężenia światła po przejściu przez przedmioty przezroczyste po-

172 IX. Cieniowanie winno uwzględniać fakt załamania promienia świetlnego przy przechodzeniu światła z jednego ośrodka przezroczystego do drugiego (stosunek sinusa kąta padania do sinusa kąta załamania jest równy stosunkowi prędkości rozchodzenia się światła w pierwszym ośrodku do prędkości jego rozchodzenia się w drugim ośrodku). Zwykle przezroczystość materiałów określa się za pomocą bezwzględnych współczynników załamania k p, które definiuje się jako stosunek prędkości światła w próżni do prędkości w danym ośrodku (materiale). Oznacza to, że dla materiałów idealnie przezroczystych mamy k p ' 1, a dla zupełnie nie przepuszczających światła k p ' 0. Jeżeli przez I 1 oznaczymy natężenie źródła światła znajdującego się za danym punktem powierzchni, a przez I 2 światła odbitego, określonego wzorem (9.9), to okazuje się, że całkowite natężenie światła w tym punkcie można wyznaczyć za pomocą wzoru Powyższa zależność jest uproszczona, gdyż współczynnik załamania każdego materiału zależy od długości fali, a więc koloru światła. W ogólności powinniśmy napisać równanie oświetlenia analogiczne do równania (9.10). 9.3. Metoda Gourauda Dla obiektów wielościennych prostą metodą symulacji oświetlenia jest przyjęcie stałego jego natężenia dla każdej ściany. Model taki jest poprawny dla źródeł światła i obserwatora znajdujących się daleko od obiektu. Jeśli jednak obserwator i (lub) źródła światła będą znajdowały się blisko obiektu składającego się z powierzchni krzywoliniowych, które będziemy aproksymować za pomocą płaskich wielokątów, to w pobliżu krawędzi wspólnych dwóch sąsiednich ścian o różnej jasności wystąpi tzw. efekt Macha. Polega on na tym, że miejsca w pobliżu krawędzi będą się nam wydawały jaśniejsze lub ciemniejsze (w zależności od oświetlenia ich otoczenia). Jednym ze sposobów uniknięcia wrażenia nieciągłości natężenia światła jest jego interpolacja za pomocą metody zaproponowanej przez Gourauda. W metodzie tej ograniczamy się do składowej światła rozproszonego, tj. do składnika równania oświetlenia, gdyż kształty rozjaśnień spowodowanych odbiciami kierunkowymi zależą silnie od przyjętej siatki wielokątnej. Niech I i oznacza natężenie oświetlenia w wierzchołku W i wielokąta. W wierzchołku tym wyznaczamy uśredniony wektor normalny n i, równy średniej arytmetycznej wektorów normalnych do wszystkich ścian, do których wierzchołek ten należy. Skanując wielokąt w kierunku osi y, dla linii poziomej y ' j obliczamy natężenia oświetlenia w punktach jej przecięcia z krawędziami W i&1 W i i W i W i%1 :

9.4. Cienie i tekstura 173 Na ich podstawie wyznaczamy natężenie oświetlenia w każdym punkcie wewnętrznym wielokąta wzdłuż linii y ' j, tj. w punkcie o współrzędnych (x, j): gdzie x i&1, i oznacza współrzędną x punktu przecięcia linii skanowania y ' j z krawędzią W i&1 W, i a x i, i%1 z krawędzią W i W i%1. Ponieważ ostatnie równanie powinno być obliczone dla każdego piksela w kierunku osi x (pomiędzy punktami przecięcia linii skanowania z krawędziami), więc w celu zwiększenia efektywności obliczeń nie korzystamy z niego bezpośrednio, ale posługujemy się następującymi zależnościami: Warto dodać, że zamiast interpolowania natężenia oświetlenia, można też interpolować wektory normalne do powierzchni w badanych punktach. Liczba obliczeń w tej metodzie jest jednak znacznie większa niż w metodzie Gourauda, ale za to na ogół otrzymuje się znacznie lepsze obrazy wizualizowanych obiektów. 9.4. Cienie i tekstura Cieniem nazywamy obszar za przeszkodą, do którego światło nie dochodzi zupełnie (jest to tzw. cień zupełny) lub dochodzi tylko częściowo (półcień). Dodanie cieni i półcieni rzucanych przez modele obiektów na pewną umowną płaszczyznę podstawy wizualizacji i na inne modele obiektów znacznie zwiększa realizm otrzymywanego obrazu. Przy modelowaniu cieni należy wziąć pod uwagę następujące fakty:! jeśli położenie obserwatora pokrywa się z położeniem pojedynczego źródła światła, to żadne cienie nie są postrzegane,! półcienie nie występują w przypadku punktowych źródeł światła o równym natężeniu,! dla scen statycznych cienie są ustalone i nie zmieniają się przy przemieszczaniu obserwatora (położenie cienia ulega zmianie tylko przy zmianie wzajemnego położenia wizualizowanego obiektu i źródła światła). Rozważmy najpierw prosty przypadek sceny złożonej z pojedynczego obiektu, który rzuca cień na płaskie podłoże. Wykonanie cienia modelu takiego obiektu polega na wykonaniu rzutu na płaszczyznę reprezentującą na ekranie podłoże (technikę tę można zastosować także dla wielu obiektów, których wzajemne odległości są takie, że nie rzucają cieni na siebie). Jeśli założymy, że źródło światła znajduje się w nieskończoności, to obiekt jest oświetlany przez równoległe promienie świetlne docierające z kierunku l ' [x L, y L, z L ] (zob. rys. 82). Gdy płaszczyzną reprezentującą podłoże będzie płaszczyzna o równaniu z ' 0, to każdy punkt obiektu P o współrzędnych (x P, y P, z P ) będzie rzucał cień w punkcie S o współrzędnych (x S, y S, 0).

174 IX. Cieniowanie Rys. 82. Cień rzucany przez pojedynczy obiekt Ponieważ wektory SP i l są równoległe (leżą na tej samej prostej), więc SP ' "l, co w postaci skalarnej można przedstawić za pomocą równań gdyż z S ' 0. Z ostatniego równania możemy wyznaczyć stałą " i podstawić do dwóch pierwszych równań. Otrzymamy (we współrzędnych jednorodnych) (9.11) Dla obiektu wielościennego zbiór wszystkich punktów (x S, y S, 0) (otrzymanych w wyniku wykonania przekształcenia (9.11)) określa na płaszczyźnie z ' 0 wielokąt, który można dołączyć do pewnych algorytmów usuwania niewidocznych linii i powierzchni, m. in. do algorytmu z buforem głębokości (zob. p. 8.2). Algorytmy wyznaczania cieni są w zasadzie takie same, jak algorytmy usuwania niewidocznych linii i powierzchni. Te drugie określają, które powierzchnie są widoczne z punktu położenia obserwatora, podczas gdy algorytmy wyznaczania cieni określają powierzchnie widoczne ze źródła światła. Wszystkie powierzchnie, które są niewidoczne ze źródła światła (punktowego) są położone w cieniu z punktu widzenia obserwatora. Uwzględnienie cieni w równaniu oświetlenia (9.9) prowadzi do zależności (9.12)

9.4. Cienie i tekstura 175 gdzie F ' 1, jeżeli światło dociera do punktu lub F ' 0, gdy światło nie dociera do punktu. Z równania (9.12) wynika, że punkt znajdujący się w cieniu jest w dalszym ciągu oświetlany przez światło otoczenia. W literaturze można znaleźć kilka klas algorytmów wyznaczania cieni. Cztery główne podejścia, które pokrótce scharakteryzujemy, są następujące:! generowanie cieni metodą liniowego skanowania,! określanie wielościanów cieni,! określanie cieni przez transformacje źródeł światła,! zastosowanie Z-bufora cieni. Generowanie cieni metodą liniowego skanowania jest rozszerzeniem algorytmu liniowego skanowania (zob. p. 8.3), w którym wyznaczanie powierzchni widocznych jest połączone z wyznaczaniem cieni. Wielokąty, które mogą rzucać cienie, są rzutowane na płaszczyznę skanowania z uwzględnieniem źródła światła jako środka rzutowania. Gdy dla pewnego piksela linia skanowania przecina wielokąt rzutowany na tę płaszczyznę z punktu widzenia obserwatora i jednocześnie wielokąt rzucający cień, to zmienia się kolor piksela. Ponieważ przy n wielokątach na jeden wielokąt może rzucać cień n&1 wielokątów, więc trzeba wyznaczyć n(n&1) rzutów każdego wielokąta na każdy inny wielokąt. Liczbę tę można ograniczyć przez zastosowanie kroku wstępnego, w którym wszystkie wielokąty rzutuje się na sferę otaczającą źródło światła ze źródłem światła jako środkiem rzutu. Pary rzutów, które nie mają części wspólnej, można wyeliminować z dalszych rozważań. W metodzie określania wielościanów cieni dla każdego obiektu tworzy się bryłę cienia. Bryła ta jest ograniczona przez zbiór niewidocznych wielokątów cienia utworzonych przez przecięcie ostrosłupa cienia (nieskończonego z jednej strony i ściętego ze strony drugiej) z ostrosłupem widoczności. Wielokąty wielościanów cieni są uwzględniane w algorytmach usuwania niewidocznych powierzchni, tyle że są one traktowane jako niewidoczne. Jeśli prosta łącząca położenie obserwatora z punktem obiektu przechodzi przez bryłę cienia, to przecina dwie jej ściany, umownie nazywane przednią i tylną. Punkt obiektu znajduje się w cieniu, gdy leży za ścianą przednią i przed ścianą tylną bryły cienia. W trzecim podejściu dla wielościennego obiektu (ograniczonego wielokątami) stosuje się najpierw algorytm usuwania niewidocznych powierzchni z punktu widzenia źródła światła. Powstają w ten sposób wielokąty, które są widoczne ze źródła światła, a zatem nie będące w cieniu. Zbiór z tymi wielokątami dodaje się do zbioru z oryginalnymi wielokątami obiektu (po wykonaniu transformacji do tego samego układu odniesienia). Dopiero dla tego rozszerzonego zbioru wielokątów stosuje się rzutowanie na płaszczyznę odniesienia. Metodę z Z-buforem cieni stosuje się jako rozszerzenie algorytmu z buforem głębokości (zob. p. 8.2). Proces wyznaczania cieni składa się z dwu etapów. W pierwszym etapie analizuje się scenę (obiekty) z punktu widzenia źródła światła i zapamiętuje informacje o głębokości obiektów w Z-buforze cieni. W drugim etapie dla każdego punktu widocznego (z miejsca położenia obserwatora) o współrzędnych (x, y, z) oblicza się (stosując przekształcenie układu współrzędnych) jego współrzędne ekranowe w układzie współrzędnych związanych ze źródłem światła. Jeśli wartość jest większa niż wartość pamiętana w Z-buforze dla tego punktu, oznacza to, że dany punkt jest w cieniu. Uwzględnianie tekstury, czyli mikrostruktury powierzchni obiektów, jest drugim, obok koloru, sposobem ich rozróżniania na ekranie. W modelowaniu tekstury uwzględnia się pięć parametrów powierzchni obiektu:

176 IX. Cieniowanie! kolor,! odbicia kierunkowe i rozproszone,! perturbacje wektora normalnego na powierzchni,! krystaliczność,! przezroczystość. Należy zaznaczyć, że najczęściej uwzględnia się tylko dwa pierwsze elementy. Odwzorowanie tekstury jest przekształceniem mikrostruktury powierzchni obiektu trójwymiarowego w obraz dwuwymiarowy. Dziedzina tego odwzorowania, czyli dziedzina samej tekstury, może być jedno-, dwu- lub trójwymiarowa. Najczęściej definiuje się ją jako dwuwymiarową i w niej określa się prostokątną mapę tekstury, której poszczególne elementy są nazywane tekselami. Przyjmując, że piksel jest prostokątem (zwykle zakładamy, że jest kwadratem), odwzorowujemy jego cztery wierzchołki w płat powierzchni. W układzie współrzędnych krzywoliniowych Ost tego płata otrzymujemy pewien zbiór punktów (czworokąt krzywoliniowy), który następnie przekształcamy do układu współrzędnych tekstury Ouv (zob. rys. 83). Przekształcenia te wyznaczają w mapie tekstury czworokąt. Na podstawie wartości tekseli leżących wewnątrz tego czworokąta określamy (np. przez zsumowanie) wartość piksela. Odpowiednia interpretacja tej wartości powoduje zmianę koloru piksela na ekranie. Rys. 83. Odwzorowanie piksela w mapę tekstury Odwzorowanie tekstury wpływa tylko na cieniowanie powierzchni, która w dalszym ciągu wydaje się gładka. W celu modelowania nierówności powierzchni tworzy się tzw. mapę nierówności (w podobny sposób jak mapę tekstury). Mapa nierówności uwzględnia perturbacje wektora normalnego do powierzchni i określa przesunięcia punktu na powierzchni trochę powyżej lub trochę poniżej rzeczywistego jego położenia. 9.5. Modelowanie kolorów Kolor jest cechą wrażenia wzrokowego, która pozwala obserwatorowi ustalić różnice w jakości wrażeń. Różnice te mogą być spowodowane różnicami w rozkładzie widmowym źródła światła. Rozróżniamy światło achromatyczne (biel, szarość, czerń), które możemy zaobserwować w czarno-białym filmie oraz światło chromatyczne (zieleń, czerwień itd.). Wrażenia

9.4. Cienie i tekstura 177 wzrokowe są znacznie bogatsze w przypadku światła chromatycznego (przeciętny człowiek potrafi rozróżnić około 150 czystych barw występujących w widmie słonecznym). Na wrażenie koloru składają się trzy czynniki:! barwa, którą fizycznie określa długość fali świetlnej,! jasność, która pozwala ocenić, w jakim stopniu dane ciało odbija lub przepuszcza padające na nie światło (określa się ją stopniem podobieństwa do barwy białej lub czarnej),! nasycenie, będące cechą wrażenia wzrokowego, na podstawie której potrafimy ocenić udział chromatycznie czystej barwy w całkowitym wrażeniu. Jasność jest w przybliżeniu wrażeniowym odpowiednikiem wielkości fotometrycznej zwanej współczynnikiem luminancji (stosunek luminancji, czyli świecenia, danego ciała do luminancji rozpraszacza doskonałego, czyli rozpraszacza światła o współczynniku pochłaniania równym zeru, w tych samych warunkach oświetlenia i obserwacji). Z kolei nasycenie jest w przybliżeniu odpowiednikiem wielkości kolorymetrycznej zwanej czystością pobudzania (stosunek czystego światła o dominującej długości fali do światła białego, przy czym światło białe i poziomy szarości mają nasycenie 0% i nie zawierają żadnej barwy o dominującej długości fali). W grafice komputerowej używa się kilku modeli barw, zwanych też przestrzeniami barw. Model barw jest to określony trójwymiarowy układ współrzędnych wraz z widzialnym podzbiorem, w którym leżą wszystkie barwy z określonej gamy barw. Do podstawowych modeli należą:! RGB (skr. od ang. red czerwony, green zielony i blue niebieski), używany w monitorach kolorowych,! CMY (cyan turkusowy, magenta karmazynowy i yellow żółty) i CMYK (litera K oznacza czwartą barwę czarną), które wykorzystuje się w urządzeniach drukujących,! YIQ, wykorzystywany w amerykańskim systemie NTSC telewizji kolorowej,! YUV, wykorzystywany w europejskim systemie PAL telewizji kolorowej,! HSV (hue odcień, saturation nasycenie, value wartość), który jest zorientowany na użytkownika i wykorzystuje intuicyjne wrażenia artysty, a więc tinty (tinta powstaje przez dodanie białego barwnika do czystego barwnika, co zmniejsza nasycenie), tony (ton uzyskuje się przez dodanie barwnika białego i czarnego) i cienie (cień powstaje przez dodanie barwnika czarnego do czystego barwnika, przez co zmniejsza się jaskrawość),! HLS, będący pewną modyfikacją modelu HSV (zob. dalej). W modelu RGB osie x, y i z prawoskrętnego układu współrzędnych prostokątnych są oznaczone odpowiednio przez R, G i B. W układzie tym kolory przedstawiane są przez podanie współrzędnych (R, G, B), przy czym wszystkie kolory leżą w sześcianie jednostkowym, którego wierzchołkami są kolory: czerwony (1, 0, 0), żółty (1, 1, 0), zielony (0, 1, 0), czarny (0, 0, 0), karmazynowy (1, 0, 1), biały (1, 1, 1), turkusowy (0, 1, 1) i niebieski (0, 0, 1). Przekątna łącząca wierzchołki (0, 0, 0) i (1, 1, 1) reprezentuje poziomy szarości z równym udziałem każdej barwy podstawowej. W modelu CMY rozważa się podobny sześcian, tyle że osie układu są interpretowane jako barwy dopełniające barw czerwonej, zielonej i niebieskiej. W układzie tym kolor biały ma współrzędne (0, 0, 0), a czarny (1, 1, 1). W modelach YIQ i YUV kolory też przedstawia się w prostokątnym układzie współrzędnych, tyle że oś y nie oznacza koloru żółtego, lecz luminancję, która charakteryzuje natężenie światła. W dawnej telewizji czarno-białej pokazywało się tylko składową Y sygnału barwnego, a barwy były zakodowane w składowych I oraz Q.

178 IX. Cieniowanie W modelu HSV układ współrzędnych jest układem cylindrycznym, a podzbiór przestrzeni, w którym zdefiniowano model jest ostrosłupem sześciokątnym o wierzchołku w punkcie (0, 0, 0) i podstawie leżącej w płaszczyźnie V ' 1. Współrzędna S reprezentuje nasycenie, współrzędna V wartość, a kąt H przedstawia odcień. Na podstawie ostrosłupa są umieszczone względnie jasne barwy, a wierzchołki podstawy stanowią barwy: czerwona (H ' 0 ), żółta (H ' 60 ), zielona (H ' 120 ), turkusowa (H ' 180 ), niebieska (H ' 240 ) i karmazynowa (H ' 300 ). Barwa biała znajduje się w środku podstawy (V ' 1 i S ' 0), a barwa czarna stanowi wierzchołek ostrosłupa (V ' 0 i S ' 0). Model HLS jest rozszerzeniem modelu HSV i też wykorzystuje układ współrzędnych cylindrycznych, w którym oś S oznacza się teraz przez L. Zbiór kolorów w tym modelu stanowią dwa ostrosłupy sześciokątne złączone podstawami w płaszczyźnie L ' 0,5. Kolor czarny znajduje się, podobnie jak w modelu HSV, w początku układu współrzędnych. Kolor biały jest reprezentowany przez wierzchołek drugiego ostrosłupa i ma współrzędne L ' 1 i S ' 0.