Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Grafika komputerowa Wykład 11 Analiza widoczności.

Podobne prezentacje


Prezentacja na temat: "Grafika komputerowa Wykład 11 Analiza widoczności."— Zapis prezentacji:

1 Grafika komputerowa Wykład 11 Analiza widoczności

2 J. Sas: Advanced Computer Graphics - Simple rendering techniques – part2 Analiza widoczności 1) Obiekty muszą być zamkniętymi bryłami zamodelowanymi za pomocą reprezentacji brzegowej 3) Wektory normalne są skierowane na zewnątrz brył Odrzucanie wewnętrznych stron (ang. backface culling) 2) Obiekty muszą być bryłami wypukłymi 4) Obserwator musi być na zewnątrz brył Posortuj powierzchnie wg odległości od obserwatora (najbardziej odległe powierzchnie na poczatku); Dla wszystkich powierzchni w malejącym porzadku: { if N*O >0 // kąt pomiędzy N i O < 90° wypełnij obszar rzutu ściany na ekranie; } Closed convex solid N N N O – direction to observer

3 Analiza widoczności Sortowanie trójkątów może być niewystarczające do określenie właściwej kolejności wyświetlania – do którego punktu trójkąta mierzyć odległość (środek, najblizszy, najdalszy???) Backface culling - wady T2T2 T1T1 Który z T1, t2 wyświetlić jako pierwszy: Sortowanie wg środków -> T2 -> źle !!! Sortowanie wg najbliższych wierzchołków -> T2 -> źle !!! Sortowanie wg najbliższych wierzchołków -> T1 -> OK T2T2 T1T1 T2T2 … ale ta zasada nie sprawdza się dla sceny jak poniżej:

4 Backface culling – inne metody wyboru ściany do wyświetlenia (Newell, Sancha, 1970) Analiza widoczności powtarzaj dopóki istnieją trójkąty niewyświetlone: { wybierz do wyświetlenia trójkąt dla którego zachodzi jeden z poniższych warunków: z min > max (z max ) dla wszystkich pozostałych trójkatów wszystkie pozostałe trójkąty leżą po tej jego stronie co obserwator (a), leży po tej stronie każdego z pozostałych trójkątów, która nie zawiera obserwatora (b) jego rzut jest rozłączny z rzutami wszystkich pozostałych trójkątów; jeśli żaden z warunków nie zachodzi dla żadnego trójkąta wybierz ten o największym z max wyświetl wybrany trójkąt i usuń goz listy pozostałych do wyświetlenia; } (a) (b)

5 Backface culling - wady Bez względu na kryterium sortowania końcowy rezultat będzie zawsze niepoprawny – żaden z trójkątów nie jest całkowicie widoczny a ostatnio wyświetlony będzie zawsze widoczny na obrazie w całości Analiza widoczności

6 Obcinanie do obszaru widzenia Projekcji prespektywicznej w okładzie obserwatora można poddawać tylko te fragmenty geometrii, dla których w okładzie obserwatora z >= d (tzn. leżą po tej samej stronie obserwatora co rzutnia Jeśli cały trójkąt (odcinek) leży po niewłaściwej stronie – odrzucamy Jeśli część trójkąta (odcinka) leży po niewłaściwej stronie – przycinamy Przycinamy płaszczyzną obcinającą (ang clipping plane) leżącą przed obserwatorem Ponieważ tworzymy prostokątny obraz rastrowy będący jedynie fragmentem rzutni – wygodniej jest przycinać elementy do obszaru okna obrazu rzutnia fragment obcięty Obserwator w pozycji standardowej Przednia płaszczyzna obcinająca fragment widoczny P1P1 P2P2 P z =d c

7 Obcinanie odcinka Dany odcinek o końcach P 1 = (x 1,y 1,z 1 ), P 2 =(x 2,y 2,z 2 ) Jeśli (z 1 > d c ) i (z 2 >d c ) – odcinek w całości widoczny Jeśli (z 1 < d c ) i (z 2 < d c ) – odcinek w całości niewidoczny Jeśli (z 1 > d c ) i (z 2 < d c ) – przycinamy: Zamieniamy P 2 = (x 2,y 2,z 2 ) na P = (x 2, y 2, z 2 ) rzutnia fragment obcięty Obserwator w pozycji standardowej Przednia płaszczyzna obcinająca fragment widoczny P1P1 P2P2 P z =d c

8 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu nowego końca odcinka w punkcie przecięcia przycinanego odcinka z prostą zawierającą bok okna Jeśli po przycięciu obydwa wierzchołki w oknie - akceptacja Jeśli po przycięciu obydwa końce po niewłaściwej stronie pewnej krawędzi okna – odrzucamy Jeśli żaden z tych przypadków nie zachodzi tniemy odcinek kolejną prostą zawierająca bok okna

9 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu nowego końca odcinka w punkcie przecięcia przycinanego odcinka z prostą zawierającą bok okna Jeśli po przycięciu obydwa wierzchołki w oknie - akceptacja Jeśli po przycięciu obydwa końce po niewłaściwej stronie pewnej krawędzi okna – odrzucamy Jeśli żaden z tych przypadków nie zachodzi tniemy odcinek kolejną prostą zawierająca bok okna

10 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu nowego końca odcinka w punkcie przecięcia przycinanego odcinka z prostą zawierającą bok okna Jeśli po przycięciu obydwa wierzchołki w oknie - akceptacja Jeśli po przycięciu obydwa końce po niewłaściwej stronie pewnej krawędzi okna – odrzucamy Jeśli żaden z tych przypadków nie zachodzi tniemy odcinek kolejną prostą zawierająca bok okna

11 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu nowego końca odcinka w punkcie przecięcia przycinanego odcinka z prostą zawierającą bok okna Jeśli po przycięciu obydwa wierzchołki w oknie - akceptacja Jeśli po przycięciu obydwa końce po niewłaściwej stronie pewnej krawędzi okna – odrzucamy Jeśli żaden z tych przypadków nie zachodzi tniemy odcinek kolejną prostą zawierająca bok okna

12 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu nowego końca odcinka w punkcie przecięcia przycinanego odcinka z prostą zawierającą bok okna Jeśli po przycięciu obydwa wierzchołki w oknie - akceptacja Jeśli po przycięciu obydwa końce po niewłaściwej stronie pewnej krawędzi okna – odrzucamy Jeśli żaden z tych przypadków nie zachodzi tniemy odcinek kolejną prostą zawierająca bok okna

13 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu nowego końca odcinka w punkcie przecięcia przycinanego odcinka z prostą zawierającą bok okna Jeśli po przycięciu obydwa wierzchołki w oknie - akceptacja Jeśli po przycięciu obydwa końce po niewłaściwej stronie pewnej krawędzi okna – odrzucamy Jeśli żaden z tych przypadków nie zachodzi tniemy odcinek kolejną prostą zawierająca bok okna Dla obydwu końców odcinka wyznaczamy czterobitowe wektory (b T b B b L b R ) określające czy koniec jest po właściwej stronie prostej ( 0 – po właściwej, 1 – po niewłaściwej )

14 Obcinanie odcinka do rozmiaru okna (Cohen, Sutherland) wylicz wektory B0 i B1 dla końców odcinka P0 i P1; while (true) { if ( (B0 or B1) == ( ) ) { akceptuj odcinek (P1 P2); break; } else if ( (B0 and B1) != ( ) ) { odrzuć odcinek w całości; break; } else { // cięcie if ( B0 != ( ) ) b = B0; else b = B1; if ( b[0] ) { // cięcie górną krawędzią okna x = x0 + (x1 - x0) * (ymax - y0) / (y1 - y0); y = ymax } else if ( b[1] ) { // cięcie dolną krawędzią okna x := x0 + (x1 - x0) * (ymin - y0) / (y1 - y0); y = ymax else if ( b[2] ) { // cięcie lewą krawędzią okna y := y0 + (y1 - y0) * (xmin - x0) / (x1 - x0); x = xmin else { //ciecie prawą krawędzia okna y := y0 + (y1 - y0) * (xmax - x0) / (x1 - x0); x = xmax } if ( b == B0 ) P0 = (x,y); oblicz B0 else P1 = (x,y); Oblicz B1 }

15 Obcinanie trójkąta do rozmiaru okna Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu boków leżących po różnych stronach prostej zawierającej bok okna Aby przyciąć wielokąt półpłaszczyzną: znajdujemy dwa boki o wierzchołkach po przeciwnej stronie krawędzi półpłaszczyzny, znajdujemy punkty przecięcia tych odcinków w krawędzią odrzucamy wierzchołki po niewłaściwej stronie krawędzi dołączamy do wielokąta dwa nowe wierzchołki

16 Obcinanie trójkąta do rozmiaru okna Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniiu boków leżących po różnych stronach prostej zawierającej bok okna Aby przyciąć wielokąt półpłaszczyzną: znajdujemy dwa boki o wierzchołkach po przeciwnej stronie krawędzi półpłaszczyzny, znajdujemy punkty przecięcia tych odcinków w krawędzią odrzucamy wierzchołki po niewłaściwej stronie krawędzi dołączamy do wielokąta dwa nowe wierzchołki

17 Obcinanie trójkąta do rozmiaru okna Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu boków leżących po różnych stronach prostej zawierającej bok okna Aby przyciąć wielokąt półpłaszczyzną: znajdujemy dwa boki o wierzchołkach po przeciwnej stronie krawędzi półpłaszczyzny, znajdujemy punkty przecięcia tych odcinków w krawędzią odrzucamy wierzchołki po niewłaściwej stronie krawędzi dołączamy do wielokąta dwa nowe wierzchołki

18 Obcinanie trójkąta do rozmiaru okna Przycinamy kolejno odcinek czterema półpłaszczyznami których częścią wspólną jest obszar okna Przycinanie polega na znajdowaniu boków leżących po różnych stronach prostej zawierającej bok okna Aby przyciąć wielokąt półpłaszczyzną: znajdujemy dwa boki o wierzchołkach po przeciwnej stronie krawędzi półpłaszczyzny, znajdujemy punkty przecięcia tych odcinków w krawędzią odrzucamy wierzchołki po niewłaściwej stronie krawędzi dołączamy do wielokąta dwa nowe wierzchołki Otrzymany wielokąt jest zawsze wypukły Ze względu na wypukłość łatwo go striangularyzować

19 Analiza widoczności 1) Ten fragment jest ostatecznie widoczny w obszarze piksela do którego odległość od obserwatora jest najmniejsza Algorytm z Z – buforem (buforem głębokości) rzutnia z1z1 z2z2 z3z3 z 3 T 3 jest widoczny T3T3 T2T2 T1T1 Obserwator w pozycji standardowej

20 Analiza widoczności 1) Dla każdego piksela obrazu rastrowego zapamiętaj odległość do najblizszego trójkata przetworzonego do tej pory – tablica zawierająca te odległości nazywana jest z- buforem lub buforem głębokości ( ang. depth buffer (z-buffer) ) Algorytm Z - bufora 2) Wyliczone kolory zapisywane są w buforze koloru (color buffer). Rozdzielczośc obu buforów jest taka sama. 3) Trójkąty modelu sceny przetwarzane są jeden po drugim, w dowolnej kolejności. 4) Dla aktualnie przetwarzanego trójkąta obszar pokrywane przez jego rzut na powierzchnię obrazu jest określany za pomocą metody linii skanowania z interpolacją (omówiona poprzednio) 5) Dla każdego piksela obszaru pokrywanego przez rzut trójkąta atrybuty ( w tym głębokość z) jest określana metodą interpolacji dwuliniowej. 6) Jeśli obliczona głębokość z jest mniejsza niż zapisana w z-buforze, wartości w buforze koloru i z-buforze są zastępowane przez nowe, wyliczone dla wyświetlanego fragmentu 0) Metod może być bezpośrednio zastosowana do reprezentacji brzegowej trójkątowej. Inne reprezentacje wymagają wstępnej triangularyzacji

21 Pseudokod algorytmu z-bufora fill depth buffer with infinity value; fill color buffer with background color; for each triangle t in the scene model for each pixel (i,j) of the triangle projection on the image plane; { calculate z coordinate of the triangle fragment visible through pixel (e.g. by using interpolation) if ( z < depth_buffer[i,j] ) { depth_buffer[i,j] = z; calculate color c of the fragment at pixel (i,j) by using Gouraud shading – interpolate color directly or by using Phong shading – interpolate normals and caluclate color model; color_buffer[i,j] = c; } Analiza widoczności

22 Wyświetlanie scen z powierzchniami przezroczystymi za pomocą algorytmu z-bufora Podstawowy algorytm z-bufora nie przetwarza poprawnie scen z powierzchniami przezroczystymi rzutnia T3T3 T2T2 T1T1 Obserwator w standardowej pozycji Jeśli : trójkąty są wyświetlane w kolejności: T3 T2 T1 T1 jest nieprzezroczysty T2 i T3 są przezroczyste to zapis głębokości z dla T3 blokuje wyświetlenie T2 i T1, pomimo, że T1 jest widoczny przez ich przezroczyste powierzchnie

23 Podziel trójkąty na dwa zbiory: nieprzezroczyste i przezroczyste W pierwszym przebiegu wyświetl trójkąty nieprzezroczyste Wyłącz zapis do z-bufora ale zachowaj test z-bufora Posortuj trójkąty przezroczyste wg odległości od obserwatora w malejącej kolejności Wyświetl trójkąty nieprzezroczyste w tej kolejności projection plane T3T3 T2T2 T1T1 observer in standard position Przy wypełnianiu bufora kolory przy wyświetlaniu trójkątów przezroczystych zastosuj mieszanie koloru fragmentu wyświetlanego c T z kolorem c in aktualnie zapisanym w buforze koloru, zastosuj współczynnik przezroczystości k t trójkąta wyświetlanego: Color of T1 displayed Color of T2 blended with color of T1 Color of T3 blended with color of T1 and T2 c out = k t * c in + c T Wyświetlanie scen z powierzchniami przezroczystymi za pomocą algorytmu z-bufora – podejście dwuprzebiegowe


Pobierz ppt "Grafika komputerowa Wykład 11 Analiza widoczności."

Podobne prezentacje


Reklamy Google