czwartek, 19 sierpnia 2010

[WPF 3D] Backface culling, do usuwania niewidocznych powierzchni w WPF 3D [PL]

Promuj
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.
Promuj

Brak komentarzy:

Prześlij komentarz

Posty powiązane / Related posts