• Nie Znaleziono Wyników

Sekwencja działa´n w algorytmie wyznaczania punktu przeci˛ecia prostej z trójk ˛ atem

Podstawy teoretyczne

Algorytm 1 Sekwencja działa´n w algorytmie wyznaczania punktu przeci˛ecia prostej z trójk ˛ atem

Dane wej´sciowe: O, K, A, A, A′′ 1: E1 = A − A 2: E2 = A′′− A 3: S = K× E2 4: δ = S· E1 5: if(δ = 0) then 6: return 7: end if 8: T= O− A 9: u = T· S 10: if(u < 0) or (u > δ) then 11: return 12: end if 13: Q= T× E1 14: v = K· Q 15: if(v < 0) or (u+ v > δ) then 16: return 17: end if 18: t = E2· Q 19: t = t′ δ 20: u = u′ δ 21: v = v′ δ 22: returnt, u, v

tj. od kolejno´sci trzech wierzchołków widzianych z czwartego. Czworo´scian OAAA′′jest dodatnio zorientowany, je´sli wierzchołki AAA′′ obserwowane z wierzchołka O s ˛a widziane zgodnie z kie-runkiem ruchu wskazówek zegara. Mo˙zna wi˛ec okre´sli´c, czy odcinek OO przecina trójk ˛at AAA′′

badaj ˛ac znaki obj˛eto´sci znakowanych odpowiednich czworo´scianów. W [SF01] udowodniono, ˙ze od-cinek OO przecina trójk ˛at AAA′′ wtedy i tylko wtedy, gdy obj˛eto´sci czworo´scianów OAAO, OA′′AO i OAA′′O s ˛a nieujemne.

Wybór obiektów testowanych dla pojedynczego promienia

Wydajno´s´c algorytmu ´sledzenia promieni mo˙zna zwi˛ekszy´c nie tylko przez stosowanie szybkich procedur wyznaczaj ˛acych punkt przeci˛ecia promienia z obiektem, ale tak˙ze przez zmniejszenie liczby obiektów testowanych dla pojedynczego promienia. W algorytmie ´sledzenia promieni nale˙zy znale´z´c najbli˙zszy obserwatora obiekt przecinany przez dany promie´n. Najbardziej naiwn ˛a metod ˛a jest wy-znaczenie punktów przeci˛ecia dla wszystkich obiektów na scenie, a nast˛epnie wybranie spo´sród nich jednego. Zdecydowana wi˛ekszo´s´c testów oka˙ze si˛e jednak zupełnie zb˛edna, poniewa˙z z reguły poje-dyncza prosta przecina jedynie niewielki podzbiór wszystkich elementów sceny. Korzystne jest zatem zastosowanie metody wst˛epnego typowania potencjalnych kandydatów przekazywanych do procedu-ry wyznaczania punktu przeci˛e´c.

Cz˛esto stosowanymi metodami eliminacji obiektów przecinaj ˛acych dan ˛a prost ˛a s ˛a algorytmy wy-korzystuj ˛ace podział przestrzeni. W tych algorytmach przestrze´n sceny jest dzielona na elementy (komórki) zawieraj ˛ace w sobie pewn ˛a liczb˛e s ˛asiednich obiektów. Punkty przeci˛ecia z prost ˛a dla obiektów wchodz ˛acych w skład danej komórki s ˛a wyznaczane dopiero wtedy, gdy komórka ta jest przecinana przez badan ˛a prost ˛a. Rozmiar komórek mo˙ze by´c adaptowany do lokalnej g˛esto´sci obiek-tów na scenie, tj. fragmenty przestrzeni z niewielk ˛a liczb ˛a obiektów dzielone s ˛a na komórki o du˙zej obj˛eto´sci, a fragmenty z du˙z ˛a liczb ˛a obiektów na komórki o niewielkiej obj˛eto´sci. Rozmiar poszcze-gólnych komórek mo˙ze wynika´c np. z ogranicze´n na minimaln ˛a i maksymaln ˛a liczb˛e obiektów za-wartych w pojedynczym elemencie.

Z poszczególnych elementów przestrzeni buduje si˛e cz˛esto struktury hierarchiczne, w których ele-menty o mniejszej obj˛eto´sci zawieraj ˛a si˛e w elementach o wi˛ekszej obj˛eto´sci. Powstaje w ten sposób struktura drzewiasta, w której kolejne poziomy zawieraj ˛a elementy o coraz mniejszej obj˛eto´sci. Przy-kładem takiej struktury mo˙ze by´c drzewo binarnego podziału przestrzeni (drzewo BSP, ang. Binary

Space Partitioning tree), w którym poszczególne w˛ezły s ˛a dzielone na dwa elementy. Istotn ˛a cech ˛a

struktur drzewiastych jest logarytmiczna zale˙zno´s´c gł˛eboko´sci od liczby li´sci drzewa. Pozwala to na efektywne implementacje algorytmów wyszukiwania w drzewie obiektów przecinanych przez prost ˛a. Algorytm konstrukcji drzewa BSP jest algorytmem rekurencyjnym. W wyniku jego wykonania powstaje drzewo, którego korzeniem jest cała przestrze´n sceny. W pierwszym kroku algorytmu wy-bierana jest płaszczyzna dziel ˛aca cał ˛a dost˛epn ˛a przestrze´n sceny na dwa elementy. Elementy te staj ˛a si˛e potomkami korzenia drzewa. Z ka˙zdym elementem wi ˛azany jest zbiór obiektów zawieraj ˛acych si˛e po odpowiedniej stronie płaszczyzny dziel ˛acej. Nast˛epnie procedura ta jest powtarzana

rekuren-cyjnie dla ka˙zdego powstałego elementu. Warunkiem zako´nczenia rekursji jest osi ˛agni˛ecie zadanej gł˛eboko´sci drzewa b ˛ad´z granicznej liczby obiektów w ka˙zdym elemencie.

Szczególnym przypadkiem drzew BSP s ˛a drzewakd, w których płaszczyzny dziel ˛ace s ˛a zawsze prostopadłe do osi układu współrz˛ednych. Dzi˛eki temu badanie warunków w algorytmach budowania i przegl ˛adania takich drzew mo˙ze by´c przeprowadzane bez konieczno´sci wykonywania kosztownych oblicze´n. Z tego wzgl˛edu drzewakd s ˛a ch˛etnie stosowane w sprz˛etowych implementacjach algoryt-mów o´swietlenia globalnego. Przykład drzewa kd przedstawiono na rys. 2.4. Przestrze´n sceny jest

podzielona płaszczyzn ˛aΘ, a lewy i prawy potomek odpowiednio płaszczyznami Ψ i Ω.

Θ

Ψ

Rysunek 2.4. Drzewokd.

W procesie renderingu scen trójwymiarowych problem budowania drzew BSP mo˙ze zosta´c po-mini˛ety, poniewa˙z w du˙zej cz˛e´sci przypadków drzewo mo˙ze zosta´c skonstruowane na etapie mo-delowania sceny. Znacznie istotniejszym problemem jest wytypowanie cel przecinanych przez dany promie´n. Opracowano wiele algorytmów przegl ˛adania drzew BSP, zaczynaj ˛ac od [Arv88]. Bardziej kompletny przegl ˛ad wielu mo˙zliwych rozwi ˛aza´n zaprezentowano w [Bit99]. Jednym z najszybszych jest algorytm przegl ˛adania drzew kd z [HKBZ97]. Idea algorytmu polega na sprawdzeniu

płaszczyzn ˛a dziel ˛ac ˛a. Poniewa˙z płaszczyzny s ˛a prostopadłe do osi układu współrz˛ednych, problem sprowadza si˛e do porównania pojedynczych współrz˛ednych. Dodatkowo, kolejno´s´c testów jest tak dobrana, aby przypadki wyst˛epuj ˛ace najcz˛e´sciej były obsługiwane z najmniejszymi opó´znieniami.

Zapis działa´n metody opisanej w [HKBZ97] przedstawiono w alg. 2. PrzezA i A′′

oznaczono współrz˛edne punktów przeci˛ecia promienia z płaszczyznami ograniczaj ˛acymi badany w˛ezeł. Indeks współrz˛ednych zale˙zy od orientacji płaszczyzny dziel ˛acej komórk˛e – odpowiada on osi prostopadłej do płaszczyzny dziel ˛acej. Jako A oznaczono punkt znajduj ˛acy si˛e bli˙zej pocz ˛atku promienia (punkt wej´sciowy do komórki), jako A′′oznaczono punkt dalszy (wyj´sciowy). Lewy w˛ezeł zawiera obiekty

poni˙zej płaszczyzny dziel ˛acej, prawy w˛ezeł obejmuje obszar powy˙zej płaszczyzny dziel ˛acej. Przegl ˛

a-danie drzewa odbywa si˛e od korzenia w kierunku li´sci. Korze´n drzewa zawiera cał ˛a przestrze´n sceny. Na rys. 2.5 przedstawiono schematycznie kilka z mo˙zliwych poło˙ze´n promienia i w˛ezłów drzewa.