Ustalanie elementów widocznych w grach 3D Autor: Mirosław Kozioł

Selekcja pozwala znacząco zredukować ilość przetwarzanych wielokątów i jest realizowana jako dodatkowy element wspomagający algorytmy oparte na drzewach i portalach.

Możemy wyróżnić cztery rodzaje selekcji:

 

Pierwszy rodzaj selekcji polega na usunięciu tych wielokątów które znajdują się za obserwatorem i nie są widoczne:

W celu sprawdzenia czy wielokąt znajduje się za obserwatorem należy sprawdzić czy współrzędna z każdego z wierzchołków wielokąta znajduje się za współrzędną z obserwatora czyli czy wierzchołki wielokąta są widoczne. Wierzchołek widoczny to wierzchołek którego współrzędna z jest przed współrzędną z obserwatora. Wierzchołek niewidoczny to wierzchołek którego współrzędna z jest za współrzędną z obserwatora.

 

Dla trójkąta otrzymujemy cztery przypadki:

1. Wszystkie trzy wierzchołki wielokąta są widoczne - Wielokąt jest widoczny i jest przekazywany do procedury wizualizacji.

2. Jeden wierzchołek jest widoczny - Wielokąt jest usuwany lub Wielokąt jest przycinany

3. Dwa wierzchołki są widoczne - Wielokąt jest usuwany lub Wielokąt jest przycinany

4. Trzy wierzchołki są niewidoczne - Wielokąt jest niewidoczny i jest usuwany.

 

Uwagi:

Zakładamy że wielokąt składa się z trzech wskaźników do wierzchołków. Aby algorytm działał najszybciej należy sprawdzić widoczność samych wierzchołków a następnie dopiero wielokątów. Przycinanie nie jest konieczne w przypadku gdy mamy zbiór w miarę małych wielokątów.

 

Drugi rodzaj selekcji polega na usunięciu tych wielokątów które znajdują się przed obserwatorem i mają przeciwny zwrot (ang. CULL FACE):

Do eliminacji wielokątów możemy posłużyć się wektorem normalnym wielokąta lub prostym wyznacznikiem. W pierwszym przypadku sprawdzamy czy zwrot wektora normalnego wielokąta jest taki sam jak zwrot wektora patrzenia obserwatora. Jeżeli zwrot wektorów jest identyczny to wielokąt jest niewidoczny. Jeżeli zwrot wektorów jest przeciwny to wielokąt jest widoczny.

W drugim przypadku liczymy wyznacznik. Wyznacznik możemy liczyć w przestrzeni 2D lub 3D w zależności czy usuwamy wielokąty po zrzutowaniu ich na ekran czy już w przestrzeni 3D.

 

Trzeci rodzaj selekcji polega na usunięciu tych wielokątów które znajdują się przed obserwatorem, mają poprawny zwrot (ang. CULL FACE) ale nie mieszczą się w obszarze widzenia obserwatora:

Takie wielokąty możemy eliminować w przestrzeni 2D i 3D.

 

W przestrzeni 3D polega to na sprawdzeniu czy wielokąty mieszczą się w stożku widzenia obserwatora. Polega to np. na dodaniu procedury obracającej wielokąty o kąty: -Kąt poziomy, +Kąt poziomy, -Kąt pionowy, +Kąt pionowy (gdzie Kąt poziomy i Kąt pionowy to kąty tworzące stożek widzenia obserwatora). Po obróceniu lokacji o zadany kąt należy usunąć wielokąty zgodnie z pierwszym rodzajem selekcji. Kąty obrotu (poziomy i pionowy) możemy dobrać doświadczalnie sprawdzając czy po wyświetleniu lokacji nie znikają wielokąty na krawędziach ekranu.

 

W przestrzeni 2D polega to na sprawdzeniu czy wielokąty mieszczą się na ekranie.

Wielokąt nie jest widoczny gdy minimalna współrzędna x wielokąta jest większa niż maksymalna współrzędna x ekranu. Wielokąt nie jest widoczny gdy minimalna współrzędna y wielokąta jest większa niż maksymalna współrzędna y ekranu. Wielokąt nie jest widoczny gdy maksymalna współrzędna x wielokąta jest mniejsza niż minimalna współrzędna x ekranu. Wielokąt nie jest widoczny gdy maksymalna współrzędna y wielokąta jest mniejsza niż minimalna współrzędna y ekranu.

 

Czwarty rodzaj selekcji polega na sprawdzaniu czy wielokąt jest przysłaniany.

W celu sprawdzenia czy wielokąt jest przysłaniany można wykorzystać między innymi algorytmy np. Przeglądania linii (ang. scane line), Szybkiego bufora z. Ten rodzaj selekcji można pominąć dla list PVS lub metody portali.

 

 

 

 

 

Wszelkie prawa do serwisu posiada Komires Sp. z o. o.