Grafika komputerowa Wykład 6 Podstawowe algorytmy grafiki 2D
Wypełnianie obszaru: Zadany jest obszar zamknięty w obrazie rastrowym. Piksele brzegu obszary oznaczone są odróżnialną od pozostałych wartościa atrybutu (np. specyficznym kolorem) Wykonać określoną operację na każdym pikselu wnętrza obszaru (np. wpisać odpowiednią barwę) Problem – jak znaleźć piksele wnętrza obszaru
Wypełnianie obszaru: Algorytm wypełnienia przez sianie (pikseli): void fill (x, y, cb, cn) { if (color(x, y) != cb) and (color(x, y) != cn) setcolor (x, y, cn); fill (x, y-1, cb, cn); fill (x, y+1, cb, cn); fill (x-1, y, cb, cn); fill (x+1, y, cb, cn); } cb – znacznik koloru konturu cn – kolor wypełnienia Wady: Głęboka rekursja, W konsekwencji – wolne działanie, ograniczenia wielkości wypełnianego obszaru, Zalety: Prostota implementacji
Wypełnianie obszaru: Algorytm wypełniania poprzez znajdowanie segmentów (Smitha): połóż na stos segment zawierający ziarno; while (stos niepusty) { pobierz segment ze stosu wypełnij segment kolorem wypełnienia znajdź segmenty sąsiednie w sąsiednich liniach poziomych które jeszcze nie zostały wypełnione połóż znalezione segmenty na stos } Zalety: Większa efektywność, płytki stos Wady Bardziej złożona implementacja
Testowanie położenia punktu względem wielokąta: (xP,yP) (xl,yl) (xr,yr) Zbadaj liczbę przecięć półprostej P(xP,yP),x∞ z bokami wielokąta: Jeśli liczba parzysta – punkt na zewnątrz Jeśli liczba nieparzysta – punkt wewnątrz Równanie prostej zawierającej bok: ax + by +c = 0 Jest przecięcie jeśli:
Interpolacja w przestrzeni obrazu: Zadane są kolory w wierzchołkach trójkąta. Chcemy pocieniować trójkąt – tzn. wypełnić wnętrze trójkąta barwą w taki sposób aby płynnie zmieniała się ona pomiędzy barwami określonymi dla wierzchołków W tym celu będziemy interpolować barwę metodą podwójnej interpolacji liniowej Obszar trójkąta będzie wypełniany kolejnymi poziomymi liniami skanowania W przypadku konieczności wypełnienia innego wielokąta można go podzielić na trójkąty i wykonać zadanie niezależnie dla składowych trójkątów
Interpolacja w przestrzeni obrazu: yu xl , al xr , ar yl scan line segment covered by triangle first image row containig triangle last image row containig triangle raster image triangle being drawn Algorytm wypełniania trójkąta: Wyznacz indeksy yu, yl górnej i dolnej linii obrazu zawierającej trójkąt For y = yu to yl step 1 Wyznacz kolumny xl, xr zawierające końce odcinka pokrytego przez trójkąt w lini y Wyznacz atrybutu al, ar dla końcowych pikseli w linii skanowania For x = xl to xr step 1 Wylicz atrybuty piksela p[y,x] drogą interpolacji pomiędzy al i ar Zapisz wyliczone wartości atrybutów w pikselu p[y,x]
Interpolacja w przestrzeni obrazu : Calculating xl, xr: (x1 , y1) yu xl , al xr , ar y yl (x2 , y2) (x3 , y3) scan line segment covered by triangle first image row containig triangle last image row containig triangle raster image triangle being drawn Algorytm wypełniania trójkąta: Wyznacz indeksy yu, yl górnej i dolnej linii obrazu zawierającej trójkąt For y = yu to yl step 1 Wyznacz kolumny xl, xr zawierające końce odcinka pokrytego przez trójkąt w lini y Wyznacz atrybutu al, ar dla końcowych pikseli w linii skanowania For x = xl to xr step 1 Wylicz atrybuty piksela p[y,x] drogą interpolacji pomiędzy al i ar Zapisz wyliczone wartości atrybutów w pikselu p[y,x]
Interpolacja w przestrzeni obrazu : Wyliczanie al, ar: yu xl , al xr , ar y yl gdzie: a1, a2, a3 – atrybuty (colors, normals etc.) w wierzchołkach V1, V2, V3 scan line segment covered by triangle first image row containig triangle last image row containig triangle raster image triangle being drawn Algorytm wypełniania trójkąta: Wyznacz indeksy yu, yl górnej i dolnej linii obrazu zawierającej trójkąt For y = yu to yl step 1 Wyznacz kolumny xl, xr zawierające końce odcinka pokrytego przez trójkąt w lini y Wyznacz atrybutu al, ar dla końcowych pikseli w linii skanowania For x = xl to xr step 1 Wylicz atrybuty piksela p[y,x] drogą interpolacji pomiędzy al i ar Zapisz wyliczone wartości atrybutów w pikselu p[y,x]