Rozdział 9. ELIMINACJA ELEMENTÓW ZASŁONIĘTYCH

9.2. Bryła wypukła i zorientowanie ściany, klasy algorytmów

Rozpatrzmy przypadek wielościanu wypukłego. Jest to jeden z przykładów problemu eliminacji elementów zasłoniętych, dla którego można pokazać kilka efektywnych i jednocześnie prostych algorytmów. Można zauważyć, że jeżeli na scenie jest dowolny wielościan wypukły (ale tylko jeden !), to wnioskowanie o widoczności jego elementów jest dość proste. Traktując taką scenę jako zbiór wielokątów (z których każdy jest oczywiście ścianą wielościanu), można ten zbiór podzielić na trzy grupy:

  • Wielokąty widoczne przez obserwatora (wielokąty przednie).
  • Wielokąty niewidoczne – zasłonięte (wielokąty tylne).
  • Wielokąty, których rzut jest odcinkiem.

Wielokąty ostatniej grupy są pomijalne, odpowiednie odcinki zostaną i tak narysowane jeśli pojawią się wielokąty widoczne.

W pierwszej i drugiej grupie występują wielokąty, które w całości podlegają określonym zasadom widoczności i przynależności do grupy. Nie może zachodzić przypadek, że tylko część wielokąta jest widoczna (a druga część zasłonięta). A zatem rozwiązanie zadania wyboru elementów widocznych w przypadku wielościanu wypukłego sprowadza się do określenia zbioru wielokątów należących do pierwszej grupy. I one powinny być (w całości) narysowane.


Można pokazać kilka różnych sposobów rozwiązanie tak zdefiniowanego zdania. 

Rozwiązanie A (pierwszy sposób) polega na analizie położenia obiektów w przestrzeni. Definiowane są określone wektory a następnie jest wyznaczany iloczyn skalarny tych wektorów (rys.9.2). Niech . Znak tego iloczynu określa przynależność do określonej grupy: jeśli    to ściana S1  jest widoczna z punktu P0 . (ściana S1 jest przednia). Zwróćmy uwagę na fakt, że w tym przypadku nie ma w ogóle mowy o jakimkolwiek rzucie. Położenie obserwatora w przestrzeni w zupełności wystarczy.


Rys.9.2. Wektory, na podstawie których badane jest zorientowanie ściany
(a w konsekwencji jej zorientowanie).


Rozwiązanie B korzysta z informacji zarówno pochodzących z przestrzeni obiektu (sceny), jak i z informacji jakie dostarcza rzut. – Porównywane jest zorientowanie ściany obiektu (w przestrzeni obiektu) i zorientowanie rzutu ściany (w przestrzeni rzutu). Najpierw należy przypisać zorientowanie każdej ścianie, a następnie sprawdzić, czy zorientowanie rzutu ściany jest takie samo. Jeśli oba zorientowania są jednakowe, to ściana jest widoczna (przednia).

 

Rys.9.3. a) Zorientowanie przypisane ścianie.
b) Porównanie zorientowania ściany i zorientowania jej rzutu z punktu widzenia P01 .  
c) Porównanie zorientowania ściany i zorientowania jej rzutu z punktu widzenia P02 .

Zadanie  określenia widoczności elementów wielościanu wypukłego można więc rozwiązać na dwa sposoby korzystając z rozwiązań A i B sprawdzających zorientowanie poszczególnych ścian.

 Sposób A. Określić zorientowanie każdej  ściany korzystając z rozwiązania A. Jeżeli ściana jest „przednia”, to jest widoczna.

 Sposób B. Określić zgodność zorientowania każdej ściany korzystając z rozwiązania B. Jeśli orientacja ściany i jej rzutu są zgodne to ściana jest „przednia” i jest widoczna.

 
Analizę widoczności w przypadku wielościanu wypukłego, można przeprowadzić opierając się tylko na informacji z przestrzeni rzutu – sposób C. W tym celu należy podzielić wierzchołki rzutu na dwa typy – rysunek 9.4. Pierwszy typ (węzły:  )  charakteryzuje się tym, że węzeł oraz zewnętrzne krawędzie są widoczne. O pozostałych krawędziach i ich widoczności nie można nic powiedzieć.  Drugi typ (węzły:) charakteryzuje się tym , że co prawda nie można stwierdzić czy węzeł jest widoczny czy nie, ale za to wszystkie elementy mają taki sam atrybut. A więc jeśli jakaś jedna krawędź jest widoczna, to cały węzeł i wszystkie jego krawędzie są widoczne.

Korzystając z klasyfikacji węzłów można zaproponować sposób C wyznaczania widoczności elementów wielościanu wypukłego. Określając widoczność jednego węzła drugiego typu można przenieść ten sam atrybut widoczności do sąsiednich węzłów, przechodząc od jednego węzła do drugiego. W ten sposób powstają dwa komplementarne obrazy. W takim postępowaniu nie jest potrzebna informacja z przestrzeni obiektu. Wystarczy tylko informacja dotycząca rzutu.

Klasy algorytmów


Rys.9.4. Na podstawie klasyfikacji węzłów (a) można wyeliminować
węzły (i krawędzie) niewidoczne doprowadzając do rysunku b).


Najczęściej wyróżnia się trzy klasy algorytmów rozstrzygania widoczności

  • Pracujące w przestrzeni obserwatora (np. sposób A).
  • Pracujące w przestrzeni rzutu (np. sposób C).
  • Wykorzystujące  informacje z obu przestrzeni (np. sposób B).

 Trzy sposoby rozwiązania problemu widoczności pokazują trzy sposoby wykorzystania informacji, pochodzących albo z przestrzeni obiektu (sceny), albo przestrzeni rzutu, albo obu. Oczywiście o ile w przypadku wielościanu wypukłego ten podział jest bardzo ostry i jednoznaczny, o tyle w przypadku dowolnego innego algorytmu podział będzie zdecydowanie mniej ostry i będzie oznaczał, że dany algorytm w większym stopniu wykorzystuje informację z jednej lub drugiej przestrzeni. Taki podział algorytmów można przeprowadzić dla dowolnych brył, nie tylko wypukłych.

 Z drugiej strony często mówi się o precyzji obrazowej lub obiektowej danego algorytmu. Oznacza to, że algorytmy pracujące z precyzją obrazowa wykonują obliczenia z dokładnością urządzenia wyświetlającego (wynikającą z wyświetlania pojedynczego piksela). Algorytmy pracujące z precyzją obiektowa wykonują obliczenia z dokładnością  związaną z definicją obiektów, a nie pikseli.

Złożoność algorytmów

Aby określić złożoność algorytmów określania widoczności należy zdefiniować miarę złożoności sceny (obiektu). Najczęściej przyjmuje się, liczbę ścian jako taką miarę.

Złożoność trzech wariantów algorytmów eliminacji elementów zasłoniętych dla wielościanu wypukłego (sposoby A, B, C) jest liniowa. Jest to szczególny przypadek wśród algorytmów określania widoczności.