Materiały Dorota Smorawa
Materiały Materiały, podobnie jak światła, opisywane są za pomocą trzech składowych. Opisują zdolności refleksyjno-emisyjne danej powierzchni. Do tworzenia materiału służy funkcja: glmaterialfv(face,typ,tablica_parametrów); face opisuje stronę obiektu i może przyjmować jedną z poniższych wartości: GL_FRONT - opisujemy frontową płaszczyznę prymitywów, GL_BACK - odwołujemy się do tylnej płaszczyzny, FRONT_AND_BACK - zarówno przednia, jak i tylna płaszczyzna. typ przyjmuje jedną z wymienionych wcześniej wartości GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR i za jego pomocą powiadamiamy bibliotekę, jakie właściwości refleksyjne definiujemy.
Materiały float material[] = { 0.5, 0.5, 0.5, 1.0}; glmaterialfv(gl_front,gl_ambient_and_diffuse, material); W ten sposób utworzyliśmy materiał, którego współczynniki odbicia trzech składowych wynoszą 0,5. Oznacza to, że materiał odbija połowę składowej czerwonej, zielonej i niebieskiej padającego na nią światła.
Materiały Właściwości materiałowe określają sposób postrzegania obiektu oświetlonego użytym na scenie światłem. Obiekt może być matowy, prawie całkowicie nie odbijać światła (coś w rodzaju aksamitu) lub może być połyskliwy, doskonale odbijający światło. Aby ustalić właściwości materiałowe, najpierw należy określić wartości parametrów materiałów. //Ustalenie parametrów materiału GLfloat ambient_materials[] = {0.329412, 0.223529, 0.027451, 1.0}; GLfloat diffuse_materials[] = {0.780392, 0.568627, 0.113725, 1.0}; GLfloat specular_materials[] = {0.992157, 0.941176, 0.807843, 1.0}; GLfloat shininess_materials = 27.8974;
Materiały Po zdefiniowaniu wartości parametrów materiałów, należy ustawić te parametry w funkcji rysującej aktorów lub w funkcji sceny. Dla każdego obiektu możemy ustalić inne właściwości materiałowe. //Ustawienie materiałów glmaterialfv (GL_FRONT, GL_AMBIENT, ambient_materials); glmaterialfv (GL_FRONT, GL_DIFFUSE, diffuse_materials); glmaterialfv (GL_FRONT, GL_SPECULAR, specular_materials); glmateriali (GL_FRONT, GL_SHININESS, shininess_materials); Konieczne jest jeszcze włączenie mechanizmu śledzenia właściwości materiałowych. //Śledzenie koloru materiałów glenable (GL_COLOR_MATERIAL);
Wektory normalne Wektory normalne to wektory określające, w jaki sposób światło będzie się odbijało od obiektu. Wektory normalne najczęściej definiuje się jako wektory prostopadłe do powierzchni na zewnątrz. Można również tworzyć wektory normalne prostopadłe do wyimaginowanych powierzchni, tworząc w ten sposób ciekawe zjawiska załamania światła. Jeśli mamy obiekt przypominający oszlifowany diament i ustalimy wektory normalne jako wektory prostopadłe do każdej ścianki, wówczas uzyskamy ten efekt oszlifowanego diamentu. Jeśli zaś wektory normalne zdefiniujemy jako wektor wypadkowy ścianek schodzących się w danym wierzchołku, to uzyskamy efekt rozmycia tych wierzchołków. Jeśli chcemy zdefiniować wektory normalne to używamy funkcji glnormal. Wektory normalne powinny mieć długość 1. Wektory normalne określa się przed definiowaniem obiektu. //wektory normalne wskazujące górę glnormal3f (0.0f, 1.0f, 0.0f);
Opis funkcji glcolormaterial Pozwala na ustalenie właściwości materiałów i wielokątów zgodnie z kolorami nadanymi mu funkcją glcolor. Pozwala na ustalenie właściwości materiałów bez konieczności wywoływania funkcji glmaterial. Domyślnie mechanizm śledzenia kolorów jest wyłączony. Można go włączyć wywołując funkcję glenable (GL_COLOR_MATERIAL), i w podobny sposób wyłączyć. składnia void glcolormatrerial (GLenum face, GLenum mode); parametry face określa, czy mechanizm śledzenia kolorów będzie dotyczył przednich (GL_FRONT), tylnych (GL_BACK) lub obu (GL_FRONT_AND_BACK) stron wielokątów. mode definiuje, która z właściwości materiału ma być modyfikowana zgodnie z aktualnym kolorem. Można tu podać wartości GL_EMISSION światło emitowane przez obiekt, taki obiekt nie staje się źródłem światła, GL_AMBIENT stopień odbicia światła otaczającego, GL_DIFFUSE stopień rozproszenia światła rozproszonego, GL_SPECULAR stopień odbicia światłą odbitego, GL_AMBIENT_AND_DIFFUSE
Opis funkcji glmaterial składnia parametry Ustala właściwości materiału stosowane w modelu oświetlenia. Tej funkcji używa się do ustalenia parametrów odblaskowych materiału pokrywającego wielokąty. Właściwości GL_AMBIETN, GL_DIFFUSE i GL_SPECULAR określają sposób, w jaki materiał odbija padające na niego światło. Właściwość GL_EMISSION stosowana jest dla materiałów sprawiających wrażenie emitowania własnego światła. Wartość przypisywana właściwości GL_SHININESS musi znajdować się w zakresie od 0 do 128, przy czym wyższe wartości tworzą większe efekty rozbłysków na powierzchni materiału. Właściwość GL_COLOR_INDEXES stosowana jest do ustalania właściwości odblaskowych materiałów w trybie kolorów indeksowanych. void glmaterialfv (GLenum face, GLenum pname, const GLfloat *params); face określa, czy mechanizm śledzenia kolorów będzie dotyczył przednich (GL_FRONT), wylnych (GL_BACK) lub obu (GL_FRONT_AND_BACK) stron wielokątów. pname modyfikowanie właściwości GL_AMBIETN, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_SHININESS stała z przedziału [0, 128], określa wykładnik odbłysku światła, czyli regulację stopnia występowania efektu rozbłysku obiektu, GL_AMBIENT_AND_DIFFUSE, oraz GL_COLOD_INDEXES w indeksowym trybie kolorów trzy indeksy do tablicy kolorów określające kolejno składowe RGBA, określające reakcję na światło otaczające, rozproszone i odbite. params określa tablicę wartości całkowitych lub zmiennoprzecinkowych zawierającą wartości przypisywane ustawianej właściwości.
Opis funkcji glnormal Definiuje normalną dla następnego definiowanego wierzchołka lub zbioru wierzchołków. Wektor normalny określa kierunek prostopadły do górnej powierzchni wielokąta. Funkcja stosowana jest w obliczeniach związanych z oświetleniem i cieniowaniem. Podanie wektora jednostkowego (o długości 1) bardzo podnosi prędkość renderowania. Biblioteka OpenGL automatycznie może zamieniać wszystkie wektory normalne w wektory jednostkowe, wystarczy wywołać funkcję glenable (GL_NORMALIZE). składnia void glnormal3f (GLfloat nx, GLfloat ny, GLfloat nz); parametry nx określa wartość x w wektorze normalnym, ny określa wartość y w wektorze normalnym, nz określa wartość z w wektorze normalnym,
Literatura Richard S. Wright jr, Michael Sweet: OpenGL Księga eksperta Wydanie III, Helion2005 Własne pomoce dydaktyczne i instrukcje, http://icis.pcz.pl/~mkubanek Jackie Neider, Tom Davis, Mason Woo: OpenGL Programming Guide The RedBook Kevin Hawkins, Dave Astle: OpenGL. Programowanie gier, Helion 2003 The official OpenGL web page, http://www.opengl.org http://januszg.hg.pl/opengl/