W dzisiejszym wpisie chciałbym rozwinąć temat, który zacząłem we wpisie na temat reguły prawej ręki (lub reguły zegara). Do napisania tego wpisu zainspirował mnie komentarz pod wspomnianym wpisem: „Bardzo ciekawe opisanie backface cullingu, nigdy bym nie wpadł by tak to wyjaśnić :)” Otóż moim celem nie było wtedy opisanie „backface cullingu”, a jedynie wskazanie, w jakiej kolejności podawać krawędzie, by płaszczyzna na scenie była widoczna. Zobaczmy jednak, cóż to jest ten „backface culling”?
Niniejszy wpis poza prezentacją różnych i niezależnych od konkretnego wykorzystania treści stanowi również opis pewnych zagadnień związanych z projektem Mesh Diagram 3D.Informacje dotyczące projektu oznaczone są etykietą MeshDiagram3D.
Wróćmy, więc do prostego
sześcianu wyświetlonego we wpisie „Czworościan,
sześcian ... itd. z poziomu C#”:
Teraz czas na wiekopomne odkrycie ;)
„To jest sześcian (czyli ma sześć
ścian), a na rysunku widać tylko trzy ściany!”
Poniższy rysunek pokazuje
niebieskimi strzałkami widoczne ścianki, natomiast strzałki
czerwone pokazują gdzie zajrzeć, by zobaczyć „niewidoczną”
ściankę.
To oczywiste, że tych z tyłu
nie widać. Otóż silnik
3D w WPF wychodzi z tego założenia, że skoro
ścianek nie widać, to nie trzeba ich wyświetlać
(lepsza wydajność, mniej zasobów). Ścianka niewidoczna wykrywana
jest właśnie na podstawie kierunku normalnej do tej płaszczyzny,
więc podanie wierzchołków w złej kolejności powoduje, że skoro
ścianka „zwrócona jest nie w tę stronę co trzeba”, nie jest
wyświetlana. I to jest właśnie w uproszczeniu ten „backface
culling”. Ewentualnie zajrzeć
można jeszcze do Wikipedii,
gdzie pod hasłem „Ukrywanie
krawędzi” znajdziemy:
„Gdy obiekty na scenie zbudowane są z wielokątów oraz określi
się, że "przód" wielokąta znajduje się na zewnątrz
bryły, natomiast "tył" od wewnątrz (kierunek wyznacza
normalna wielokąta), wówczas nie ma potrzeby wyświetlania
powierzchni skierowanych "tyłem" do obserwatora.
Odrzucanie tych powierzchni jest odpowiedzialne za częsty efekt w
grach
komputerowych, kiedy przypadkiem kamera znajdzie się wewnątrz
jakiegoś obiektu, zamiast widoku jego wnętrza, obiekt całkiem
znika (wszystkie widoczne polygony znajdują się z tyłu). Ta metoda
niekoniecznie nadaje się do wyświetlania obiektów
półprzezroczystych.
Metoda jest bardzo prosta i szybka, nie daje jednak gwarancji,
że rzeczywiście wszystkie niewidoczne wielokąty nie zostaną
wyświetlone.”
Brak komentarzy:
Prześlij komentarz