Algorytmy grafiki rastrowej. Mirosław Głowacki Wykład z Grafiki Komputerowej

Podobne dokumenty
WYKŁAD 3 WYPEŁNIANIE OBSZARÓW. Plan wykładu: 1. Wypełnianie wieloboku

Algorytmy grafiki rastrowej. Mirosław Głowacki Wykład z Grafiki Komputerowej

Obcinanie prymitywów. Mirosław Głowacki Wydział Inżynierii Metali i Informatyki Przemysłowej AGH

Podstawy Informatyki Wykład V

narzędzie Linia. 2. W polu koloru kliknij kolor, którego chcesz użyć. 3. Aby coś narysować, przeciągnij wskaźnikiem w obszarze rysowania.

Grafika komputerowa Wykład 2 Algorytmy rastrowe

1. Prymitywy graficzne

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Maskowanie i selekcja

Grafika Komputerowa Materiały Laboratoryjne

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

KGGiBM GRAFIKA INŻYNIERSKA Rok III, sem. VI, sem IV SN WILiŚ Rok akademicki 2011/2012

TWORZENIE OBIEKTÓW GRAFICZNYCH

Implementacja filtru Canny ego

Rysowanie precyzyjne. Polecenie:

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Obliczenia iteracyjne

9. Podstawowe narzędzia matematyczne analiz przestrzennych

FUNKCJA LINIOWA - WYKRES

Złożoność obliczeniowa zadania, zestaw 2

FUNKCJA LINIOWA - WYKRES. y = ax + b. a i b to współczynniki funkcji, które mają wartości liczbowe

Modelowanie krawędziowe detalu typu wałek w szkicowniku EdgeCAM 2009R1

Automatyczne tworzenie trójwymiarowego planu pomieszczenia z zastosowaniem metod stereowizyjnych

Plan wykładu. Wykład 3. Rzutowanie prostokątne, widoki, przekroje, kłady. Rzutowanie prostokątne - geneza. Rzutowanie prostokątne - geneza

Grafika komputerowa Wykład 9 Algorytmy wyznaczania obiektów zasłonietych

1 Wstęp teoretyczny. Temat: Obcinanie odcinków do prostokąta. Grafika komputerowa 2D. Instrukcja laboratoryjna Prostokąt obcinający

GRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej

ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)

RYSUNEK TECHNICZNY I GEOMETRIA WYKREŚLNA INSTRUKCJA DOM Z DRABINĄ I KOMINEM W 2D

Wstawianie nowej strony

Efekt rollover ze wskaźnikiem wybranej opcji

Następnie zdefiniujemy utworzony szkic jako blok, wybieramy zatem jak poniżej

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Łożysko z pochyleniami

Grafika Komputerowa. Algorytmy rastrowe

Języki formalne i automaty Ćwiczenia 5

2. Korzystając z ikony Warstwy stwórz nowe warstwy według podanego schematu:

Ekstrema globalne funkcji

Metody numeryczne I Równania nieliniowe

FORMATY PLIKÓW GRAFICZNYCH

Rysowanie punktów na powierzchni graficznej

FUNKCJE. Kurs ZDAJ MATURĘ Z MATEMATYKI MODUŁ 5 Teoria funkcje cz.1. Definicja funkcji i wiadomości podstawowe

Definicja obrotu: Definicja elementów obrotu:

SZa 98 strona 1 Rysunek techniczny

RZUT CECHOWANY DACHY, NASYPY, WYKOPY

BIBLIOTEKA PROGRAMU R - BIOPS. Narzędzia Informatyczne w Badaniach Naukowych Katarzyna Bernat

Narzędzia programu Paint

Internetowe Ko³o M a t e m a t yc z n e

Zadanie Wstaw wykres i dokonaj jego edycji dla poniższych danych. 8a 3,54 8b 5,25 8c 4,21 8d 4,85

Reprezentacja i analiza obszarów

Analiza obrazów - sprawozdanie nr 2

w jednym kwadrat ziemia powietrze równoboczny pięciobok

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Jak uzyskać efekt 3D na zdjęciach z wykorzystaniem programu InkScape

Metoda simpleks. Gliwice

VIII. USUWANIE NIEWIDOCZNYCH LINII I POWIERZCHNI

Ćwiczenie 4: Edycja obiektów

Elementy okna MatLab-a

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

Proste metody przetwarzania obrazu

Przekształcanie wykresów.

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 10 AiR III

4.6 OpenOffice Draw tworzenie ilustracji

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

WYKŁAD 2 Znormalizowane elementy rysunku technicznego. Przekroje.

Spis treści. Włodzimierz Gajda

Ćwiczenie nr 2 - Rysowanie precyzyjne

Kurs Adobe Photoshop Elements 11

Zbiór liczb rzeczywistych, to zbiór wszystkich liczb - wymiernych i niewymiernych. Zbiór liczb rzeczywistych oznaczamy symbolem R.

Obsługa mapy przy użyciu narzędzi nawigacji

4. Rysowanie krzywych

PODSTAWOWE KONSTRUKCJE GEOMETRYCZNE

WIELOKĄTY FOREMNE I ICH PRZEKĄTNE

1. Operacje logiczne A B A OR B


Techniki wstawiania tabel

Podstawy grafiki komputerowej

Analiza obrazów. Segmentacja i indeksacja obiektów

PL B1. Politechnika Koszalińska,Koszalin,PL Wanatowicz Szymon,Koszalin,PL BUP 18/01. Szymon Wanatowicz,Koszalin,PL

Narysujemy uszczelkę podobną do pokazanej na poniższym rysunku. Rys. 1

Wykład 4 Przebieg zmienności funkcji. Badanie dziedziny oraz wyznaczanie granic funkcji poznaliśmy na poprzednich wykładach.

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Spośród licznych filtrów nieliniowych najlepszymi właściwościami odznacza się filtr medianowy prosty i skuteczny.

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

8. Dynamiczne generowanie grafiki, cz. 2

Ćwiczenie 1 Automatyczna animacja ruchu

Wydział Matematyki I Informatyki ul. Słoneczna Olsztyn

Ćwiczenie nr 1. Kliknij myszką w trójkąt, aby otrzymać dostęp do uchwytów obrotów:

Cyfrowe przetwarzanie obrazów i sygnałów Wykład 12 AiR III

WZORU UŻYTKOWEGO PL Y1. UNITED PACKAGING SPÓŁKA AKCYJNA, Poznań, PL BUP 19/ WUP 05/14. MATEUSZ PŁÓCIENNIK, Poznań, PL

RZUTOWANIE PROSTOKĄTNE

Zakładka Obmiar jest dostępna dla pozycji kosztorysowej w dolnym panelu. Służy do obliczania ilości robót (patrz też p ).

Rekurencja. Rekurencja zwana także rekursją jest jedną z najważniejszych metod konstruowania rozwiązań i algorytmów.

CorelDraw - podstawowe operacje na obiektach graficznych

KONSTRUKCJA TRÓJKĄTA 1 KONSTRUKCJA TRÓJKĄTA 2 KONSTRUKCJA CZWOROKĄTA KONSTRUKCJA OKRĘGU KONSTRUKCJA STYCZNYCH

IRONCAD. TriBall IRONCAD Narzędzie pozycjonujące

Praktyczne przykłady wykorzystania GeoGebry podczas lekcji na II etapie edukacyjnym.

Transkrypt:

Algorytmy grafiki rastrowej Mirosław Głowacki Wykład z Grafiki Komputerowej

Wypełnianie prymitywów Mirosław Głowacki Wykład z Grafiki Komputerowej

Wypełnianie prymitywów Zadanie wypełniania prymitywów można podzielić na dwa etapy Podjęcie decyzji, które piksele należy wypełnić Podjęcie łatwiejszej decyzji jak wypełniać Na początek należy określić algorytmy wypełniania jednym kolorem

Wypełnianie prymitywów Ogólny algorytm wypełniania przedstawia się następująco: Rozpatruje się kolejne linie poziome (segmenty) przecinające prymityw (kolejne wiersze pikseli) Dla każdego segmentu prowadzi się wypełnianie sąsiednich pikseli leżących wewnątrz prymitywu licząc od strony lewej do prawej.

Wypełnianie prymitywów Ogólne wymagania algorytmów podstawowych: Przestrzenna spójność segmentów prymityw nie zmienia się od piksela do piksela w ramach segmentu ani między sąsiednimi liniami Spójność segmentowa piksele należące do tego samego segmentu przyjmują tę samą wartość atrybutów (barwę) Spójność międzywierszowa kolejne segmenty mają tę samą barwę Spójność krawędziowa piksele dla krawędzi powinny przyjmować tę samą wartość dla każdego segmentu przecinającego tę krawędź

Wypełnianie prymitywów Problem dwu prymitywów o wspólnej krawędzi - osobna konwersja każdego z prymitywów spowoduje zapisanie niektórych pikseli podwójnie (możliwa zmiana barw w trybie xor) Piksele należące do matematycznego wnętrza prymitywu nie przedstawiają problemu Piksele należące do brzegu również powinny być włączone do jednego z prymitywów

Wypełnianie prymitywów W celu uniknięcia rasteryzacji wspólnych brzegów dwukrotnie stosuje się regułę: Jeśli półpłaszczyzna zdefiniowana przez krawędź i zawierająca prymityw leży poniżej albo z lewej strony krawędzi, to piksel nie jest traktowany jako część prymitywu Piksele leżące na krawędziach lewych i dolnych będą rysowane

Wypełnianie prymitywów Wspólna krawędź należy zatem do prymitywu leżącego z prawej strony Lewy dolny wierzchołek prymitywu będzie rysowany podwójnie Prawy górny wierzchołek prymitywu nie będzie rysowany Uważa się, że lepiej aby wystąpiły braki pikseli niż jeśli byłyby rysowane podwójnie (niespodziewane efekty barwne w trybie xor)

Ogólny algorytm rasteryzacji wielokąta Wyznaczanie segmentów leżących pomiędzy lewymi i prawymi krawędziami wielokąta Końce segmentów wylicza się z wykorzystaniem algorytmów przyrostowych, które wyznaczają punkty przecięcia segmentu i krawędzi na podstawie informacji o przecięciu poprzedniego segmentu

Ogólny algorytm rasteryzacji wielokąta Przecięcia linii 8 z krawędziami FA i CD mają całkowite współrzędne Przecięcia linii 8 z krawędziami EF i DE mają współrzędne rzeczywiste (kreski pionowe na rysunku) 12 11 10 9 8 7 6 5 4 3 2 1 F A Przeglądana linia E a b c d B D C 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Konwersja całości prymitywu Punkty ekstremalne segmentów Inne punkty należące do segmentów

Ogólny algorytm rasteryzacji wielokąta Dla całości prymitywu tworzona jest tablica pikseli brzegowych każdego segmentu, a następnie jest ona uaktualniana jeśli zostanie wyznaczony piksel rozszerzający segment Niektóre z pikseli brzegowych leżą matematycznie poza prymitywem pikseli tych nie powinno się rysować, gdyż mogą zakłócić sąsiednie prymitywy Piksele zewnętrzne wynikają z charakteru algorytmu z punktem środkowym piksel jest wyznaczany możliwie blisko linii krawędzi, natomiast algorytm nie gwarantuje wewnętrznego charakteru piksela

Poprawiona konwersja całości prymitywu nie występują piksele o środkach poza matematycznym wnętrzem prymitywu Punkty ekstremalne segmentów Inne punkty należące do segmentów

Konwersja całości prymitywu Punkty ekstremalne segmentów Inne punkty należące do segmentów Punkty ekstremalne segmentów Inne punkty należące do segmentów

Algorytm wypełniania segmentów 1. Wyznaczanie przecięcia linii ze wszystkimi krawędziami wielokąta 2. Sortowanie przecięć według rosnącej wartości x 3. Wypełnianie pikseli leżących wewnątrz wielokąta pomiędzy kolejnymi parami przecięć

Wyznaczanie przecięć Jedynie kilka krawędzi jest interesujących ze względu na przecinanie Spójność krawędziowa - wiele krawędzi przecinanych przez i tą linię będzie przecinanych przez linię i + 1 W takiej sytuacji współrzędne przecięcia dla jednej linii są podstawą obliczeń dla linii kolejnej x i+1 = x i + 1 m

Wyznaczanie przecięć Algorytm z punktem środkowym dla odcinka pozwalał na wyznaczenie punktu najbliższego Teraz chodzi również o to, żeby był to punkt wewnętrzny Rozważmy lewą krawędź o nachyleniu większym niż +1 Inne nachylenia i prawe krawędzie są rozpatrywane podobnie, choć w nieco trikowy sposób Krawędzie pionowe będą przypadkami szczególnymi

Wyznaczanie przecięć W punkcie początkowym (x min, y min ) należy zaznaczyć piksel Jeśli y wzrasta o 1 to x na odcinku idealnym wzrasta o 1/m gdzie m = (y max y min )/ (x max x min ) Przyrost 1/m składa się z części całkowitej i ułamkowej o mianowniku (y max y min ) Przy iteracyjnym powtarzaniu tego procesu pojawi się nadmiar dla części ułamkowej i część całkowita zostanie dodatkowo powiększona o 1

Wyznaczanie przecięć Przykładowo, gdy nachylenie wynosi 5, a y wynosi 3, 2 to sekwencja wartości x będzie: 3, 3 2, 3 4, 3 6 = 4 1, 5 5 5 5 itd. Jeśli część ułamkowa jest równa 0, to można narysować piksel (x, y), który leży na odcinku Jeśli część ułamkowa jest różna od 0, to należy zaokrąglić wartość w górę aby narysować piksel całkowicie należący do wnętrza prymitywu

Wyznaczanie przecięć Można zrezygnować z korzystania z ułamka przechowując tylko licznik i wykorzystując fakt, że ułamek staje się większy od 1 gdy licznik jest większy od mianownika Jeśli część ułamkowa staje się większa od 1, to zwiększamy x o jeden, przesuwając się o jeden piksel w prawo, po czym odejmujemy 1 od części ułamkowej (czyli wartość licznika zostaje pomniejszona o wartość mianownika) Jeśli część ułamkowa jest równa 1, to należy narysować piksel (x, y), ale trzeba zmniejszyć ułamek o 1 (do zera)

Wyznaczanie przecięć kod w C++ void LeftEdgeScan(int xmin, int ymin, int xmax, int ymax, int value) { int x, y, numerator, denominator, increment } x = xmin; numerator = xmax xmin; denominator = ymax ymin; increment = denominator; for (y = ymin; y < ymax; y++) { WritePixel(x, y, value); increment += numerator; if (increment > denominator) { x++; increment -= denominator; } }

12 11 10 9 F Przeglądana linia D 8 7 E a b c d 6 5 C 4 3 A 2 1 B 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Wyznaczanie przecięć posortowana globalna tablica krawędzi (ET) x min odcięta krawędzi, dla której wartości rzędnej jest najmniejsza y max maksymalna wartość rzędnej krawędzi 12 m współczynnik nachylenia krawędzi 11 10 9 F Przeglądana linia D 8 7 E a b c d 6 5 C 4 3 A 2 1 B 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Algorytm wypełniania 1. Ustaw rzędną na najmniejszej wartości występującej w ET 2. Wyzeruj tablicę AET 3. Powtarzaj do momentu aż ET i AET będą puste i. Przesuń z ET do AET te krawędzie, dla których y = y min (krawędzie wchodzące) i posortuj AET ze względu na x

Algorytm wypełniania - cd ii. Wypełnij piksele odpowiednią wartością w przeglądanej linii y, wykorzystując pary z tablicy AET iii. Usuń z tablicy AET te pozycje, dla których y = iv. y max (krawędzie nie mające znaczenia dla następnej linii (segmentu) Zwiększ y o 1 (do wartości rzędnej dla następnej przeglądanej linii) v. Dla każdej nie-pionowej krawędzi z tablicy AET uaktualnij x (odcięta przecięcia segmentu z daną krawędzią) dla nowego y

Tablica aktywnych krawędzi (AET) Linia 9 Linia 10 zaokrąglona współrzędna x krawędzi DE 12 11 10 9 8 7 F Przeglądana linia E a b c d D 6 5 C 4 3 A 2 1 B 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Wypełnianie pikseli Do określania punktów wewnętrznych stosuje się regułę parzystości Zakłada się na początek, że każdy bit ma wartość parzystą Idąc wzdłuż segmentu, przy każdym przecięciu zmienia się jego wartość na przeciwną Rysowane są tylko te piksele, dla których rozważany bit ma wartość parzystą

Wypełnianie pikseli - strategia Posortowana lista współrzędnych x: (2, 4.5, 8.5, 13) Cztery główne problemy: 1. Który piksel jest wewnętrzny dla ułamkowych wartości x? 2. Jak postępować w przypadku przecięć dla całkowitych współrzędnych piksela? 3. Jak postępować w przypadku 2 dla współrzędnych wierzchołków? 4. Jak postępować w przypadku 2 gdy wierzchołki definiują poziomą krawędź? 12 11 10 9 8 7 6 5 4 3 2 1 0 F A Przeglądana linia E a b c d 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 B D C

Wypełnianie pikseli problemy Dla ułamkowej wartości współrzędnej x (problem 1) idąc w prawo zaokrąglamy: w dół jeśli jesteśmy wewnątrz wielokąta w górę jeśli jesteśmy na zewnątrz wielokąta Piksel ma całkowitą współrzędną x (problem 2): jeśli w segmencie jest pierwszy z lewej traktujemy jako wewnętrzny jeśli w segmencie jest pierwszy z prawej traktujemy jako zewnętrzny

Wypełnianie pikseli problemy Przy obliczaniu parzystości dla wierzchołków (problem 3): uwzględniany jest wierzchołek y min krawędzi nie jest uwzględniany wierzchołek y max krawędzi Przy obliczaniu parzystości dla wierzchołków definiujących krawędź poziomą (problem 4): uwzględniana jest dolna krawędź nie jest uwzględniana górna krawędź

Ogólny algorytm rasteryzacji wielokąta Od p. a (2,8) do lewego w stosunku do p. b (4, 8) Od pierwszego z prawej względem p. c (9, 8) do lewego w stosunku do punktu d (12, 8) Punkt B segment zerowy (7, 1) (7, 1) 12 11 10 9 8 7 6 5 4 3 2 1 F A Przeglądana linia E a b c d B D C 0 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Wypełnianie wzorami Część algorytmu konwersji realizująca zapis do każdego z pikseli ulega modyfikacji Należy uwzględnić dodatkowy parametr w procedurze WritePixel. Wzory z mapą pikselową parametr powoduje pobranie wartości koloru z odpowiedniej pozycji we wzorcu mapy pikselowej i decyduje o jego zapisaniu w wypełnianym obszarze Dla wzorów przejrzystych pixel zostaje zapisany dla parametru o warości 1, a nie zapisany dla 0

Wypełnianie wzorami przy konwersji wierszowej Podstawowym problemem jest relacja pomiędzy obszarem wzoru, a obszarem prymitywu Należy zdecydować, gdzie wzór ma być zaczepiony Wtedy staje się jasne, który piksel wzoru odpowiada danemu pikselowi prymitywu Zaczepienie: w wierzchołku wielokąta w początku układu współrzędnych

Zaczepienie wzoru w wierzchołku prymitywu Umieszcza się tam piksel leżący z lewej strony w pierwszym rzędzie mapy W tej metodzie wzór porusza się wraz z prymitywem Tę metodę stosuje się dla wzorów o silnej organizacji geometrycznej (np. kreskowanie) Wady: w wielokątach nie ma oczywistych punktów zaczepienia podobny problem występuje dla prymitywów o gładkich brzegach (np. okrąg) Programista musi często określać punkt zaczepienia dla pojedynczego prymitywu lub ich grupy

Zaczepienie w początku układu współrzędnych Cały ekran traktuje się jako obszar wypełniony wzorem Prymityw jest obszarem przeźroczystym, przez który widać wzór mapy bitowej Piksele prymitywu zmieniają się, gdy ten się przesuwa jako wykrój nad tłem Dla wzorów regularnych bez wyraźnej orientacji geometrycznej może to być niezauważalne Zalety: metoda efektywna obliczeniowo nakładające się prymitywy nie mają widocznych miejsc styku

Pokrywanie prymitywu wzorem Wzór jest indeksowany za pomocą współrzędnych pikseli (x, y) w niewielkich mapach pikselowych o rozmiarach N M W celu powtarzania wzoru korzysta się z arytmetyki modulo Przykładowo, wzór 8 8 powtarza się co osiem pikseli w wierszu i w kolumnie

Wypełnianie bez konwersji wielokrotnej - cd Zapisywanie w trybie nieprzezroczystym obiektu pokrytego wzorem z dwoma zapisami przezroczystymi: a) scena gór, b) kontur ikony domu, c) mapa bitowa pełnej wersji ikony domu, d) wyzerowanie sceny na skutek zapisania tła, e) wzór ceglasty, f) ikona domu pokryta wzorem ceglastym, g) zapisywanie na ekran w sposób przezroczysty z ikoną domu pokrytą wzorem.

Wypełnianie bez konwersji wielokrotnej Metoda jest użyteczna, gdy wymagane jest wielokrotne wypełnianie dla pojedynczego prymitywu, gdzie całość jest dwukrotnie dłuższa od konwersji wierszowej Pokazać to można dla przykładowego widoku budynku na tle gór Proces można podzielić na cztery etapy i. pierwszy etap polega utworzeniu ikony budynku korzystając z jej konturu (rys. b). Będzie ona stanowić maskę oraz obszar obcinania rysunku z 1 wewnątrz obiektu i 0 na zewnątrz (rys. c). Ta konwersja (tworzenie mapy) jest wykonywana jednokrotnie

Wypełnianie bez konwersji wielokrotnej - cd Zapisywanie w trybie nieprzezroczystym obiektu pokrytego wzorem z dwoma zapisami przezroczystymi: a) scena gór, b) kontur ikony domu, c) mapa bitowa pełnej wersji ikony domu, d) wyzerowanie sceny na skutek zapisania tła, e) wzór ceglasty, f) ikona domu pokryta wzorem ceglastym, g) zapisywanie na ekran w sposób przezroczysty z ikoną domu pokrytą wzorem.

Wypełnianie bez konwersji wielokrotnej - cd ii. iii. iv. za każdym razem, gdy potrzebna jest kopia obiektu wypełnionego wzorem w drugim etapie w kanwie jest zapisywana pełna mapa bitowa (pikselowa) w sposób przezroczysty z barwą tła, tzn. w trybie replace (rys. d) trzeci etap polega na utworzeniu pełnej mapy bitowej prymitywu wypełnionej wzorem (rys. f) poprzez skopiowanie wzoru (rys. e) do pełnej mapy korzystając z trybu and. czwarty etap polega na zapisaniu mapy z rys. f w odpowiednie miejsce rys. d w sposób przeźroczysty