GRAFIKA KOMPUTEROWA 10: Antyaliasing

Transkrypt

GRAFIKA KOMPUTEROWA 10: Antyaliasing
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
GRAFIKA KOMPUTEROWA
10: Antyaliasing
http://galaxy.agh.edu.pl/~mhojny
Prowadzący:
dr inż. Hojny Marcin
Akademia Górniczo-Hutnicza
Mickiewicza 30
30-059 Krakow
pawilon B5/p.406
tel. (+48)12 617 46 37
e-mail: [email protected]
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
1. Cel projektu:
Zapoznanie się z technikami usuwania efektu aliasingu.
2. Zadanie projektowe:
Zaprojektować aplikację która: rysuje trzy punkty o tej samej wielkości oraz trzy linie o
różnej szerokości stosując trzy poziomy jakości renderingu:
GL_FASTEST - najwyższa wydajność renderingu,
GL_NICEST - najwyższa jakość obrazu,
GL_DONT_CARE - ustawienia domyślne.
Program powinien umożliwiać włączenie i wyłączenie antyaliasingu punktów oraz wybór
jakości renderingu punktów.
3. Antyaliasing
Techniki usuwające efekt aliasingu, nazywane antyaliasingiem lub wygładzaniem krawędzi,
sprowadzają się najczęściej do rozbudowania rasteryzacji obiektów o dodatkowe piksele
„uzupełniające” brzegi obiektu lub procesie nadpróbkowania, czyli przeprowadzaniu
rasteryzacji w większej niż docelowa rozdzielczości i następującym po tym odpowiednim
skalowaniu.
Problem aliasingu w grafice rastrowej dotyczy prawie wszystkich krzywych (z wyjątkiem
poziomo i pionowo ułożonych linii których grubość jest równa wielokrotności pojedynczego
piksela). Wyświetlana czarna skośna linia prosta na białym tle bez użycia antyaliasingu
będzie składał się z czarnych pikseli na białym i będzie
widoczna w sposób
nierówny/schodkowy (rys.1).
Antyaliasing może polegać na uzupełnieniu obrazu o piksele o jasności proporcjonalnej do
odległości ich środków od idealnej prostej. W takim rozwiązaniu piksel, przez którego środek
przechodzi linia będzie czarny, a piksel dalszy od niej w odpowiednim stopniu szary, bądź
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
całkiem biały (w wypadku pikseli, których linia nie przecinała). Efektem końcowym będzie
złudzenie że linia jest dużo gładsza, ale będzie "rozmazana" (rys.1).
Ze względu na konieczność uzyskania rozsądnego kompromisu między gładkością a
rozmyciem stosuje się różne techniki zaniku jasności, oparte np. na różnych miarach
odległości. Ze względu na brak obiektywnych metod porównywania efektów
zastosowania tych technik, właściwy efekt najczęściej otrzymuje się poprzez
eksperymenty.
Rys.1. bez antyaliasingu
Rys.2. z antyaliasingiem
4. Antyaliasing - implementacja w OpenGL
Wybór jakości renderingu umożliwia funkcja:
void glHint( GLenum target, GLenum mode )
Parametr target określa, jakość którego z elementów renderingu będzie regulowana.
Przykładowe parametry:
GL_LINE_SMOOTH_HINT - jakość antyaliasingu linii,
GL_POINT_SMOOTH_HINT - jakość antyaliasingu punktów,
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
GL_POLYGON_SMOOTH_HINT - jakość antyaliasingu wielokątów.
Parametr mode określa poziom jakości renderingu. Dopuszczalne są trzy wartości:
GL_FASTEST - najwyższa wydajność renderingu,
GL_NICEST - najwyższa jakość obrazu,
GL_DONT_CARE - ustawienia domyślne.
Antyaliasing punktów:
Antyaliasing punktów jest domyślnie wyłączony w OpenGL. Aby go włączyć należy
wywołać funkcję glEnable z parametrem GL_POINT_SMOOTH. Dodatkowo trzeba
włączyć mieszanie kolorów oraz określić parametry równania mieszania kolorów przy użyciu
funkcji glBlendFunc:
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA )
Informacje o możliwościach implementacji biblioteki OpenGL w zakresie renderingu
punktów określają następujące zmienne stanu, których wartości można pobrać używając
funkcji z grupy glGetFloatv:
GL_POINT_SIZE_RANGE - minimalny i maksymalny rozmiar punktów określany przy
pomocy funkcji glPointSize,
GL_POINT_SIZE_GRANULARITY - krok z jakim może być zmieniana wielkość punktu,
W wersji 1.2 biblioteki OpenGL zostały rozdzielone:
GL_SMOOTH_POINT_SIZE_RANGE - minimalny i maksymalny rozmiar punktów z
włączonym antyaliasingiem; stała ta ma taką samą wartość jak GL_POINT_SIZE_RANGE,
GL_SMOOTH_POINT_SIZE_GRANULARITY - krok z jakim może być zmieniana
wielkość punktu z włączonym antyaliasingiem; stała ta ma taką samą wartość jak
GL_POINT_SIZE_GRANULARITY,
GL_ALIASED_POINT_SIZE_RANGE - minimalny i maksymalny rozmiar punktów bez
antyaliasingu.
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
Antyaliasing linii:
Domyślnie antyaliasing linii jest wyłączony. Zastosowanie antyaliasingu linii podobnie jak
antyaliasingu punktów sprowadza się do wywołania funkcji glEnable z parametrem
GL_LINE_SMOOTH wraz z włączeniem mechanizmu mieszania kolorów z takimi samymi
ustawieniami jak przy antyaliasingu punktów.
Dopuszczalne parametry rysowania linii, które można odczytać z następujących zmiennych
stanu:
GL_LINE_WIDTH_RANGE - minimalna i maksymalna szerokość linii,
GL_LINE_WIDTH_GRANULARITY - dopuszczalny krok pomiędzy szerokością linii.
W wersji 1.2 biblioteki OpenGL zostały zastąpione:
GL_SMOOTH_LINE_WIDTH_RANGE - minimalna i maksymalna szerokość linii z
antyaliasingiem; stała ta ma taką samą wartość jak GL_LINE_WIDTH_RANGE,
GL_SMOOTH_LINE_WIDTH_GRANULARITY
szerokością
linii
z
antyaliasingiem;
stała
ta
dopuszczalny
ma
taką
krok
samą
pomiędzy
wartość
jak
GL_LINE_WIDTH_GRANULARITY,
GL_ALIASED_LINE_WIDTH_RANGE - minimalna i maksymalna szerokość linii bez
antyaliasingu.
5. Co na następnych zajęciach:
Krzywe Beziera

Podobne dokumenty