GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Transkrypt

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
GRAFIKA KOMPUTEROWA
7: Kolory i cieniowanie
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 modelami cieniowania oraz modelem barw RGB.
2. Zadanie projektowe:
Napisać aplikację która:
Dla zbioru danych wskazanego przez prowadzącego (Zestawy danych.rar >Zestaw 1 lub
Zestaw 2 >nazwa zbioru) wykonać cieniowanie metodą gładką (cieniowanie Gouarda) i
metodą płaską. W przypadku cieniowania Gouarda zastosować rozbudowaną paletę kolorów
oraz uproszczoną (dwa kolory: niebieski-czerwony). W przypadku cieniowania płaskiego
możliwość wyboru koloru. Dodatkową opcją nieobowiązkową jest możliwość włączenie i
wyłączenie ditheringu.
Przykładowy wynik działania aplikacji z zastosowaniem rozbudowanej palety kolorów jest
przedstawiony na rysunku 1.
Rys.1. Przykładowa mapa kolorów dla rozbudowanej palety kolorów.
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
Na stronie internetowej dostępny jest program demo.exe który umożliwia wczytanie danych
testowych (Zestawy danych.rar >Zestaw 1 lub Zestaw 2 >nazwa zbioru) i porównanie efektu
działania z projektowaną w ramach zajęć aplikacją.
Struktura zbioru danych składa się z trzech kolumn:
0
0
1220.71
0
2.01613
1212.81
0
4.03226
1189.11
0
6.04839
1149.54
0
8.06452
1094.03
0
10.0806
1022.47
0
12.0968
934.765
0
14.1129
831.052
0
16.129
712.56
0
18.1452
584.283
0
20.1613
457.858
…………
…………
…………
Pierwsza kolumna: współrzędne x punktów poszczególnych czworokątów (rys.2)
Druga kolumna: współrzędne y punktów poszczególnych czworokątów (rys.2)
Trzecia kolumna: wartość (zmienna typu float) przypisana do aktualnego punktu (rys.2)
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
Rys.2. Przykładowa wizualizacja punktów z zbioru danych.
Ważne! Aplikacja powinna umożliwiać wczytanie dowolnego zbioru danych (Zestawy
danych.rar >Zestaw 1 lub Zestaw 2 >nazwa zbioru) oraz mieć możliwość ustawienia modelu
cieniowania czy też rozmiaru palety kolorów.
APLIKACJA BĘDZIE ROZWIJANA NA KOLEJNYCH ZAJĘCIACH
O KOLEJNE FUNKCJE I METODY.
3. OpenGL - przydatne funkcje i parametry:
Barwa może być określana na dwa sposoby:
a) w trybie bezpośrednim w którym kolor ustalamy przy pomocy funkcji z grupy glColor.
Wspominanie funkcje możemy podzielić na trzy grupy: funkcja trójargumentowa (podajemy
składowe RGB), funkcja czteroargumentowa z dodatkową obsługą kanału alfa, funkcja która
przyjmuje wskaźnik na tablicę ze składowymi koloru.
void glColor3d( GLdouble red, GLdouble green, GLdouble blue )
void glColor3f( GLfloat red, GLfloat green, GLfloat blue )
void glColor3i( GLint red, GLint green, GLint blue )
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
void glColor4d( GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha )
void glColor4f( GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha )
void glColor4i( GLint red, GLint green, GLint blue, GLint alpha )
b) w trybie indeksowym kolor określony jest pojedynczą liczbą (indeksem) która zawiera
informacje o składowych RGB. Model zarządzania mapą kolorów jest uzależniony od typu
systemu, w którym pracuje program.
OpenGL nie posiada żadnych mechanizmów
pozwalających na zmianę zawartości mapy kolorów oraz zmiany jej rozmiarów. Początkowa
wartość indeksu bieżącego koloru wynosi 1.
void glIndexd( GLdouble c )
void glIndexf( GLfloat c )
void glIndexi( GLint c )
Czyszczenie bufora koloru w trybie indeksowym wykonuje funkcja:
void glClearIndex( GLfloat c )
Parametr c określa indeks mapy kolorów (domyślna wartość indeksu = 0). Funkcja ta jest
odpowiednikiem funkcji glClearColor działającej w trybie bezpośrednim.
Bufor koloru:
Bufor koloru służy do przechowywania obrazu naszej renderowanej sceny. W OpenGL
najczęściej stosuje sie dwa bufory koloru: przedni i tylny w celu eliminacji migotania obrazu.
Nasza bieżąca scena znajduje się w przednim buforze i jest wyświetlana na ekranie, natomiast
w tym samym czasie rysowana jest kolejna ramka sceny. Po zakończeniu rysowania, bufory
są zamieniane i cały cykl jest powtarzany.
Cieniowanie:
Cieniowanie jest metodą polegającą na ustaleniu koloru poszczególnych pikseli wielokąta. W
bibliotece OpenGL udostępnione są dwa modele cieniowania: cieniowanie płaskie oraz
cieniowanie gładkie.
Akademia Górniczo - Hutnicza
Wydział Inżynierii Metali i Informatyki Przemysłowej
ul. Adama Mickiewicza 30, 30-059 Kraków
W przypadku cieniowania płaskiego wielokąt otrzymuje jeden kolor który zostaje określony
dla ostatniego wierzchołka, natomiast cieniowanie gładkie wykorzystuje algorytm Gouarauda,
który polega na liniowej interpolacji wartości składowych koloru określonych dla każdego
wierzchołka wielokąta.
Wybór rodzaju cieniowania umożliwia funkcja:
void glShadeModel( GLenum mode )
Parametr mode może przyjąć jedną z wartości:
GL_FLAT - cieniowanie płaskie,
GL_SMOOTH - cieniowanie gładkie.
Dithering:
Biblioteka OpenGL opisuje kolory za pomocą liczb zmiennoprzecinkowych. Końcowy efekt
widoczny na ekranie zależy przede wszystkim od możliwości systemu okienkowego oraz karty
graficznej. W przypadku, gdy w systemie dostępna jest niewielka ilość barw (np. 256), biblioteka
OpenGL może symulować kolory metodą ditheringu. Algorytm ten umieszcza w pobliżu siebie
różnokolorowe plamki (piksele) tak aby sprawiały wrażenie jednolitej barwy. Technika ta bywa
określana
także
mianem
rozpraszania,
rozsiewania
lub
roztrząsania.
Włączenie i wyłączenie ditheringu wymaga użycia funkcji glEnable/glDisable z parametrem
GL_DITHER.
4. Literatura:
a) J.D.Foley, A. van Dam, S.K. Finer, J.F. Hughes, R.L. Phillips, “Wprowadzenie do grafiki
komputerowej".
b) http://www.opengl.org
5. Co na następnych zajęciach:
Konwersja i mieszanie kolorów.