Laboratorium grafika3D 6

background image

Laboratorium nr 6

1/7

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 źró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.

Grafika Komputerowa 3D

Temat: Materiały i oświetlenie

Instrukcja

laboratoryjna

6

Przygotował: mgr inż. Maciej Lasota

background image

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).

background image

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

GL_SHININESS

Definiujemy kolor materiału z możliwością zmiany mocy światła

odbitego. Jako ostatni parametr funkcji glMaterial podajmy liczbę z

przedziału (0 – 128) określającą moc odbicia

GL_EMISSION

Definiujemy kolor materiału z efektem emisji, który jest dodawany

do wynikowego koloru obiektu.

background image

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.

background image

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 źró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

GL_LIGHTx

Parametr określa, którego światła parametry modyfikujemy

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

background image

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

GL_SPOT_CUTOFF

Definiujemy rozpiętość stożka widzenia w stopniach,

domyślnie jest 180 stopni

GL_SPOT_DIRECTION

Określamy wektor kierunku

GL_SPOT_EXPONENT

Definiujemy płynne przejście od miejsc najbardziej do najmniej

oświetlonych

3.3) Tłumienie światła

Tłumienie powoduje, że obiekty bardziej oddalone od źró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

GL_LINEAR_ATTENUATION

Wartość wynosi 0.0

GL_QUADRATIC_ATTENUATION

Wartość wynosi 0.0

Wraz z odległością wierzchołki

oświetlane są tak samo

Parametr „pname”

Opis

Efekty

GL_CONSTANT_ATTENUATION

Wartość wynosi 0.0

GL_LINEAR_ATTENUATION

Wartość wynosi 1.0

GL_QUADRATIC_ATTENUATION

Wartość wynosi 0.0

Zanik liniowy

Parametr „pname”

Opis

Efekty

GL_CONSTANT_ATTENUATION

Wartość wynosi 0.0

GL_LINEAR_ATTENUATION

Wartość wynosi 0.0

GL_QUADRATIC_ATTENUATION

Wartość wynosi 1.0

Zanik kwadratowy

background image

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 4 Grafika 3D
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 7
Laboratorium grafika3D 5
Laboratorium grafika2D 5
Laboratorium grafika3D 2
Laboratorium Grafiki Komputerowej3, Studia PK, Inne - serwer Nexus, Dydaktyka, ZaoczniGK, OpenGL-lab
Laboratorium grafika2D 6
Laboratorium grafika3D 1
Laboratorium grafika3D 3
Laboratorium 4 Grafika 3D
Laboratorium grafika3D 7
Laboratorium grafika2D 3
Laboratorium grafika2D 7

więcej podobnych podstron