Laboratorium_grafika3D_6.pdf

(90 KB) Pobierz
Laboratorium nr 6
1/7
Instrukcja
laboratoryjna
Grafika Komputerowa 3D
Temat:
Materiały i oświetlenie
Przygotował:
mgr in . Maciej Lasota
6
1)
Specyfikacja
Wprowadzenie
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.
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,
pojawia się rozbłysk (zazwyczaj o kolorze białym).
e na powierzchni obiektu
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”
GL_FRONT
GL_BACK
GL_FRONT_AND_BACK
Opis
Przednia strona wielokąta
Tylna strona wielokąta
Przednia i tylna strona wielokąta
Parametr „pname”
GL_AMBIENT
GL_DIFFUSE
GL_SPECULAR
GL_AMBIENT_AND_DIFFUSE
GL_SHININESS
GL_EMISSION
Opis
Definiujemy kolor materiału dla
światła
otoczenia
Definiujemy kolor materiału dla
światła
rozproszonego
Definiujemy kolor materiału dla
światła
odbitego
Definiujemy kolor materiału dla
światła
otoczenia i rozproszonego
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
Definiujemy kolor materiału z efektem emisji, który jest dodawany
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”
GL_FRONT
GL_BACK
GL_FRONT_AND_BACK
Opis
Przednia strona wielokąta
Tylna strona wielokąta
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
ź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”
GL_LIGHTx
Opis
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
Zgłoś jeśli naruszono regulamin