Laboratorium grafika3D 6


Laboratorium nr 6 1/7
Grafika Komputerowa 3D
Instrukcja
laboratoryjna Temat: Materiały i oświetlenie
Przygotował: mgr inż. Maciej Lasota
6
1) Wprowadzenie
Specyfikacja biblioteki OpenGL rozróżnia trzy niezależne rodzaje światła:
światło otoczenia (ambient light), światło rozproszone (diffuse light) oraz światło odbite
(specular light). Każdy komponent światła definiowany jest przez cztery wartości RGBA,
określające względną intensywność czerwonego, zielonego, niebieskiego oraz
składowej alfa.
Światło otoczenia jest to najprostszy typ światła. Rozprasza się równomiernie na
powierzchni danego obiektu niezależnie od swojego zródła. Odbija się od obiektów
znajdujących się w jego zasięgu, rozjaśniając wszystkie obiekty znajdujące się dookoła.
Światło rozproszone w przeciwieństwie do światła otoczenia posiada kierunek.
Oznacza to, że gdy oświetlamy światłem rozproszonym jedną ze stron danego obiektu to
tylko ta strona jest oświetlona, a pozostałe nie. Światło rozproszone rozprowadzane jest na
powierzchni obiektu w sposób równomierny.
Laboratorium nr 6 2/7
Światło odbite również posiada określony kierunek, ale jest odbijane na powierzchni
obiektu w konkretnym kierunku. Takie typ światła powoduje, że na powierzchni obiektu
pojawia się rozbłysk (zazwyczaj o kolorze białym).
1.1) Wektory normalne
Aby w OpenGL oświetlenie było obliczanie poprawnie, każdej ścianie należy
przypisać wektor normalny. Służą do tego celu funkcje z rodziny glNormal:
void glNormal3f(GLfloat x, GLfloat y, GLfloat z)
void glNormal3d(GLdouble x, GLdouble y, GLdouble z)
Funkcje te definiują wektor normalny dla powierzchni. Przyjmują trzy parametry
będące współrzędnymi wektora normalnego. Wektor ten powinien być jednostkowy
(znormalizowany).
Laboratorium nr 6 3/7
2) Materiały
Materiały określają kolor dla obiektu, na który pada światło. W OpenGL każdy
materiał pokrywający zdefiniowany obiekt ma określone właściwości odbicia światła
otaczającego, rozproszonego i odbitego. Barwa obiektu widzianego przez obserwatora
zależy od rodzaju światła padającego na obiekt i materiału, z jakiego jest wykonany.
Podobnie jak światło, materiał również można opisać za pomocą współczynników ambient,
diffuse i specular, które w tym wypadku oznaczają procentową zdolność materiału do
absorbowania i odbijania światła. Za przypisywanie obiektom materiałów odpowiada rodzina
funkcji glMaterial.
void glMaterialf(GLenum face, GLenum pname, GLfloat param)
void glMateriald(GLenum face, GLenum pname, GLdouble param)
void glMateriali(GLenum face, GLenum pname, GLint param)
Funkcje z rodziny glMaterial przyjmują trzy parametry. Pierwszy parametr określa, czy
definiujemy materiał dla przednich, tylnych, czy obydwu stron wielokątów. Drugi parametr
określa jaką właściwość materiału definiujemy. Ostatni parametr to tablica wartości
składających się na kolor RGB lub pojedyncza wartość.
Parametr  face Opis
GL_FRONT Przednia strona wielokąta
GL_BACK Tylna strona wielokąta
GL_FRONT_AND_BACK Przednia i tylna strona wielokąta
Parametr  pname Opis
GL_AMBIENT Definiujemy kolor materiału dla światła otoczenia
GL_DIFFUSE Definiujemy kolor materiału dla światła rozproszonego
GL_SPECULAR Definiujemy kolor materiału dla światła odbitego
GL_AMBIENT_AND_DIFFUSE Definiujemy kolor materiału dla światła otoczenia i rozproszonego
Definiujemy kolor materiału z możliwością zmiany mocy światła
GL_SHININESS odbitego. Jako ostatni parametr funkcji glMaterial podajmy liczbę z
przedziału (0  128) określającą moc odbicia
Definiujemy kolor materiału z efektem emisji, który jest dodawany
GL_EMISSION
do wynikowego koloru obiektu.
Laboratorium nr 6 4/7
2.1) Śledzenie materiału
Śledzenie materiału umożliwia nam zmianę koloru danego typu materiału z
wykorzystaniem funkcji glColor. Możemy np. śledzić kolor światła otoczenia, każdorazowa
zmiana koloru funkcją glColor spowoduje zmianę koloru materiału dla światła otoczenia.
Włączenie śledzenia materiału dokonujemy za pomocą funkcji glEnable z parametrem
GL_COLOR_MATERIAL.
Przypisanie śledzonego koloru materiału funkcji glColor, odbywa się za pomocą
funkcji glColorMaterial.
void glColorMaterial(GLenum face, GLenum mode)
Funkcja ta przyjmuje dwa parametry. Pierwszy parametr określa strony wielokątów
których będzie dotyczyć śledzony kolor. Drugi parametr określa materiał, jaki będzie
śledzony.
Parametr  face Opis
GL_FRONT Przednia strona wielokąta
GL_BACK Tylna strona wielokąta
GL_FRONT_AND_BACK Przednia i tylna strona wielokąta
Parametr  mode
GL_AMBIENT
GL_DIFFUSE
GL_SPECULAR
GL_AMBIENT_AND_DIFFUSE
GL_EMISSION
Najczęściej podaje się GL_FRONT_AND_BACK jako pierwszy parametr oraz
GL_AMBIENT_AND_DIFFUSE jako drugi.
Laboratorium nr 6 5/7
3) Oświetlenie
Aby włączyć oświetlenie w OpenGL należy wywołać funkcję glEnable z parametrem
GL_LIGHTING. Funkcja ta nakazuje bibliotece, aby przy obliczaniu koloru wierzchołków w
scenie brała pod uwagę właściwości materiału i parametry oświetlenia. W OpenGL
dostępnych jest osiem niezależnych zródeł światła. Każdemu z nich możemy przypisać inne
położenie, kolor otoczenia czy rozproszenia oraz kilka innych parametrów. Funkcją służącą
do ustawiania i modyfikacji parametrów oświetlenia jest glLight.
void glLightf(GLenum light, GLenum pname, GLfloat param)
void glLighti(GLenum light, GLenum pname, GLint param)
Funkcja ta przyjmuje trzy parametry. Pierwszy parametr określa którego światła
parametry modyfikujemy. Drugi parametr określa, który parametr światła zmieniamy. Trzeci
parametr określa kolor lub pojedynczą wartość przypisywaną danej właściwości.
Parametr  light Opis
Parametr określa, którego światła parametry modyfikujemy
GL_LIGHTx x  jest to liczba z przedziału <0,7>, 0 < x < GL_MAX_LIGHTS
np. GL_LIGHT1, GL_LIGHT2, &
Parametr  pname
GL_AMBIENT
GL_DIFFUSE
GL_SPECULAR
UWAGA!!! Za pomocą funkcji glEnable oraz glDisable, możemy włączać i wyłączać
konkretne światło podając jako parametr np. GL_LIGHT1, GL_LIGHT2 itd.
3.1) Pozycja światła
Konkretnemu światłu możemy przypisać położenie, które określa z której strony pada.
Aby zdefiniować położenie światła jako drugi parametr  pname funkcji glLight podajemy
stałą GL_POSITION. Jako trzeci parametr przekazujemy wtedy czteroelementowy wektor.
Parametr  pname
GL_POSITION
Laboratorium nr 6 6/7
3.2) Reflektor
Reflektor jest to specjalny typ światła, który oświetla obiekt w danym konkretnym
miejscu np. latarka.
Parametr  pname Opis
Definiujemy rozpiętość stożka widzenia w stopniach,
GL_SPOT_CUTOFF
domyślnie jest 180 stopni
GL_SPOT_DIRECTION Określamy wektor kierunku
Definiujemy płynne przejście od miejsc najbardziej do najmniej
GL_SPOT_EXPONENT
oświetlonych
3.3) Tłumienie światła
Tłumienie powoduje, że obiekty bardziej oddalone od zródła światła są mniej
oświetlone, a w konsekwencji mogą nie być oświetlone w ogóle jeśli znajdują się
odpowiednio daleko. Tłumienie ustawiamy za pośrednictwem trzech stałych:
GL_CONSTANT_ATTENUATION
GL_LINEAR_ATTENUATION
GL_QUADRATIC_ATTENUATION
W zależności od tego jakie przyjmują one wartości otrzymujemy odpowiednie efekty
tłumienia.
Parametr  pname Opis Efekty
GL_CONSTANT_ATTENUATION Wartość wynosi 1.0
Wraz z odległością wierzchołki
GL_LINEAR_ATTENUATION Wartość wynosi 0.0
oświetlane są tak samo
GL_QUADRATIC_ATTENUATION Wartość wynosi 0.0
Parametr  pname Opis Efekty
GL_CONSTANT_ATTENUATION Wartość wynosi 0.0
GL_LINEAR_ATTENUATION Wartość wynosi 1.0 Zanik liniowy
GL_QUADRATIC_ATTENUATION Wartość wynosi 0.0
Parametr  pname Opis Efekty
GL_CONSTANT_ATTENUATION Wartość wynosi 0.0
GL_LINEAR_ATTENUATION Wartość wynosi 0.0 Zanik kwadratowy
GL_QUADRATIC_ATTENUATION Wartość wynosi 1.0
Laboratorium nr 6 7/7
3.4) Modyfikacja oświetlenia globalnego
W OpenGL istnieje możliwość modyfikacji oświetlenia globalnego. Do tego celu służy
rodzina funkcji glLightModel.
void glLightModelf(GLenum pname, GLfloat param)
void glLightModeli(GLenum pname, GLint param)
Funkcje te przyjmują dwa parametry. Pierwszy parametr określa jaką właściwość
modelu oświetlenia zmieniamy:
GL_LIGHT_MODEL_LOCAL_VIEWER
GL_LIGHT_MODEL_TWO_SIDE
GL_LIGHT_MODEL_AMBIENT
Drugi parametr określa przypisywaną wartość.


Wyszukiwarka

Podobne podstrony:
Laboratorium grafika2D 4
Laboratorium grafika3D 4
Laboratorium grafika2D 7
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 1
Laboratorium grafika3D 3
Laboratorium grafika3D 5
Laboratorium grafika3D 2
Laboratorium grafika2D 2
Laboratorium grafika2D 6
Laboratorium grafika3D 1
Rola laboratoriów w świetle wymagań systemów zarządzania jakoscią
Laboratorium 3
Arch grafika osnovi kompozicii grigoryan

więcej podobnych podstron