OpenGL Światło (cieniowanie)

Podobne dokumenty
OpenGL Światło (cieniowanie)

Zadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym

Tekstury. Dorota Smorawa

6 Przygotował: mgr inż. Maciej Lasota

Teksturowanie. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 10. Tekstury. Proces nakładania tekstury.

Oświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.

Światło. W OpenGL można rozróżnić 3 rodzaje światła

OpenGL - tekstury Mapowanie tekstur

Światła i rodzaje świateł. Dorota Smorawa

Plan wykładu. Akcelerator 3D Potok graficzny

OpenGL teksturowanie

Laboratorium 4 OpenGl (4) Oświetlenie sceny

Mapowanie tekstur Mip-mapy (level of detail) Filtrowanie Multiteksturowanie

Grafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38

Laboratorium 2. Część I. Perspektywa. Obsługa poleceń myszy. 2. W sekcji przeznaczonej na definicję zmiennych globalnych dodaj następujące definicje:

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

Materiały. Dorota Smorawa

OpenGL model oświetlenia

Mieszanie kolorów. Dorota Smorawa

OpenGL przezroczystość

Synteza i obróbka obrazu. Tekstury. Opracowanie: dr inż. Grzegorz Szwoch Politechnika Gdańska Katedra Systemów Multimedialnych

Animowana grafika 3D. Opracowanie: J. Kęsik.

Teksturowanie (ang. texture mapping)

Oświetlenie obiektów 3D

Grafika Komputerowa Wykład 6. Teksturowanie. mgr inż. Michał Chwesiuk 1/23

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie

Bartosz Bazyluk Teksturowanie Pojęcie tekstury, potok, zastosowania. Gry komputerowe, Informatyka N1, III Rok

Gry komputerowe, Informatyka N1, III Rok

Bartosz Bazyluk POTOK RENDEROWANIA Etapy renderowania w grafice czasu rzeczywistego. Grafika Komputerowa, Informatyka, I Rok

3 Przygotował: mgr inż. Maciej Lasota

Oświetlenie. Modelowanie oświetlenia sceny 3D. Algorytmy cieniowania.

Ustawienia materiałów i tekstur w programie KD Max. MTPARTNER S.C.

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Programowanie gier komputerowych Tomasz Martyn Wykład 6. Materiały informacje podstawowe

dr inż. Jacek Dąbrowski, KSG

OpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Bartosz Bazyluk Teksturowanie Mapy bitowe, pojęcie tekstury, potok, zastosowania.

GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów

glwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie

Studium podyplomowe. Programowanie w OpenGL. Michał Turek, AGH Kraków

Model oświetlenia. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie

Ćwiczenie 4 - Podstawy materiałów i tekstur. Renderowanie obrazu i animacji

OpenGL Zaawansowana grafika komputerowa

Laboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny

GRK 4. dr Wojciech Palubicki

Bartłomiej Filipek

Zatem standardowe rysowanie prymitywów wygląda następująco:

GRAFIKA CZASU RZECZYWISTEGO Interakcja, ruch kamery, oświetlenie.

Polecenie ŚWIATPUNKT - ŚWIATŁO PUNKTOWE

Filtrowanie tekstur. Kinga Laurowska

Laboratorium Grafiki Komputerowej i Animacji. Ćwiczenie V. Biblioteka OpenGL - oświetlenie sceny

Transformacje. dr Radosław Matusik. radmat

System graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.

Przetwarzanie obrazów rastrowych macierzą konwolucji

GLKit. Wykład 10. Programowanie aplikacji mobilnych na urządzenia Apple (IOS i ObjectiveC) #import "Fraction.h" #import <stdio.h>

GRAFIKA KOMPUTEROWA 10: Antyaliasing

2 Przygotował: mgr inż. Maciej Lasota

Julia 4D - raytracing

Grafika Komputerowa 3D Etap drugi

Janusz Ganczarski. OpenGL Pierwszy program

Parametryzacja obrazu na potrzeby algorytmów decyzyjnych

Grafika Komputerowa 3D Etap drugi

Grafika Komputerowa. Wykład 8. Przygotowanie do egzaminu. mgr inż. Michał Chwesiuk 1/32

Autodesk 3D Studio MAX Teksturowanie modeli 3D

GRAKO: ŚWIATŁO I CIENIE. Modele barw. Trochę fizyki percepcji światła. OŚWIETLENIE: elementy istotne w projektowaniu

0. OpenGL ma układ współrzędnych taki, że oś y jest skierowana (względem monitora) a) w dół b) w górę c) w lewo d) w prawo e) w kierunku do

OpenGL oświetlenie i tekstury. OpenGL oświetlenie. Bogdan Kreczmer.

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Implementacja filtru Canny ego

8 Przygotował: mgr inż. Maciej Lasota

OpenGL : Oświetlenie. mgr inż. Michał Chwesiuk mgr inż. Tomasz Sergej inż. Patryk Piotrowski. Szczecin, r 1/23

Ogólne informacje o Aplikacji

Analiza obrazu. wykład 4. Marek Jan Kasprowicz Uniwersytet Rolniczy 2009

Karty graficzne możemy podzielić na:

Gry Komputerowe Laboratorium 4. Teksturowanie Kolizje obiektów z otoczeniem. mgr inż. Michał Chwesiuk 1/29. Szczecin, r

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Shadery. Artur Staszczyk Bartłomiej Filipek

Grafika komputerowa. Model oświetlenia. emisja światła przez źródła światła. interakcja światła z powierzchnią. absorbcja światła przez sensor

Techniki wstawiania tabel

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Zadanie polega na zbudowaniu i wyświetleniu przykładowej animowanej sceny przedstawiającej robota spawalniczego typu PUMA.

GRK 5. dr Wojciech Palubicki

INFORMACJE z dn

Grafika komputerowa. OpenGL. Podstawy

Wstęp Podstawy Pierwszy program Definiowanie sceny 3D Przekształcenia geometryczne... 47

Rendering sceny z modelem węzła

PRZEWODNIK PO PRZEDMIOCIE

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink.

Zjawisko widzenia obrazów


Mechanika ogólna. Kinematyka. Równania ruchu punktu materialnego. Podstawowe pojęcia. Równanie ruchu po torze (równanie drogi)

Grafika 3D program POV-Ray - 1 -

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

Wybrane aspekty teorii grafiki komputerowej - dążenie do wizualnego realizmu. Mirosław Głowacki

Proste metody przetwarzania obrazu

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Transkrypt:

OpenGL Światło (cieniowanie) 1. Oświetlenie włączanie/wyłączanie glenable(gl_lighting); - włączenie mechanizmu oświetlenia gldisable(gl_lighting); - wyłączenie mechanizmu oświetlenia glenable(gl_light0); - włączenie światła pierwszego. OpengGL standardowo posiada osiem źródeł światła. Zmienne OpenGL: GL_LIGHT0, GL_LIGHT1, GL_LIGHT2, GL_LIGHT3, GL_LIGHT4, GL_LIGHT5, GL_LIGHT6, GL_LIGHT7 określają, którego światła ma dotyczyć operacja. gldisable(gl_lightx) wyłączenie światła (x 0,..,7) 2. Wybór cieniowania Do pokazania efektu światła używane jest cieniowanie (zaciemnianie powierzchni). W OpenGL można ustawić cieniowanie płaskie (GL_FLAT) oraz gładkie (GL_SMOOTH); glshademodel(parametr) ustawienie rodzaju cieniowania. Parametr może przyjąć wartości: GL_FLAT, GL_SMOOTH. 3. Normalne Przy obliczaniu natężenia światła rozproszonego (diffuse) i odbitego (specular) OpenGL korzysta z normalnych. Normalna to w OpenGL wektor wyznaczający kąt odbicia promieni światła. W świecie rzeczywistym normalna jest zawsze prostopadła do powierzchni (wektor długości jeden i prostopadły do powierzchni). W OpenGL normalną można ustawić oddzielnie dla każdego wierzchołka i nie musi być ona prostopadła do powierzchni wyznaczonej przez zbiór wierzchołków. Uśredniając wartości normalnej w danym wierzchołku dla przylegających powierzchni można otrzymać efekt odbicia światła od zaokrąglonej powierzchni (przy cieniowaniu gładkim). glnormal3f(x, y, z) ustawia normalną dla danego wierzchołka. Od tego momentu aż do następnej zmiany wartość wektora normalnego wynosi x, y, z. 4. Zmiana parametrów światła gllightfv(gl_lightx, parametr, wartość) zmiana parametru światła x = (0,,7) Wartość parametr dotyczy cechy światła jaka ma być zmieniona. Parametr może przybierać wartości:

GL_AMBIENT przyjmuje parametr typu wektor [r,g,b], lub [r,g,b,a] w którym określa się natężenie poszczególnych składowych koloru, dla światła bezwzględnego (otoczenia). GL_DIFFUSE parametry j.w., dla światła rozproszonego. GL_SPECULAR parametry j.w., dla światła odbitego. GL_POSITION określa pozycję światła w przestrzeni. Przyjmuje parametr typu wektor [x,y,z,rodzaj] gdzie rodzaj określa rodzaj światła. Dla wartości 0 jest to światło odległe promienie światła są równoległe i określone są wektorem [x, y, z]. Natomiast dla wartości rodzaj równej 1 światło jest punktowe a współrzędne x, y, z określają położenie światła w przestrzeni. Położenie to przemnażane jest przez macierz przekształcenia. Dzięki temu w prosty sposób można uzyskać przemieszczanie się światła. 5. Włączenie koloru powierzchni Cieniowanie zastępuje kolor powierzchni (zdefiniowany funkcją glcolor...). Można użyć jednocześnie koloru i cieniowania używając komendy: glenable(gl_color_material); OpenGL TEKSTUROWANIE 1. Przygotowywanie tekstur: Tekstury dla akceleratorów graficznych muszą mieć rozmiary będące wielokrotnością liczby 2. (2^n). Rozmiary w pionie i poziomie są niezależne. glgentextures(1, &numer_tekstury); - komenda generuje teksturę o numerze numer_tekstury; numer_tekstury jest typu Gluint; gltexparameteri(gl_texture_2d, typ, parametr); - ustawianie parametrów tekstury. Opis parametrów: GL_TEXTURE_2D zmiana parametru dotyczy tekstur dwuwymiarowych typ typ własności, którą chcemy zmienić, np.: GL_TEXTURE_WRAP_S (GL_TEXTURE_WRAP_T) parametry określające, której

współrzędnej tekstury będą modyfikowane właściwości (pozioma, pionowa). Dla tego typu własności można ustawić parametr: GL_REPEAT parametr oznacza zapętlenie tekstury GL_CLAMP_TO_EDGE tekstura nie będzie zapętlona typ: GL_TEXTURE_MAG_FILTER (GL_TEXTURE_MIN_FILTER) parametry określające, w jaki sposób rozmywać piksele przy powiększaniu tekstury (pomniejszaniu tekstury). Dla tego typu własności można ustawić parametr: GL_NEAREST bez filtrowania GL_LINEAR przybliżenie liniowe Dla włączonych Mipmap: GL_ NEAREST_MIPMAP_ NEAREST bez filtrowania GL_ NEAREST_MIPMAP_LINEAR tekstury bez filtrowania, przybliżenie mipmap liniowe GL_LINEAR_MIPMAP_ NEAREST filtrowanie dwuliniowe GL_LINEAR_MIPMAP_LINEAR filtrowanie trójliniowe 2. Transfer zawartości obrazu do tekstury: Tekstura standardowa: glteximage2d(gl_texture_2d,0,gl_rgba, w, h,0,gl_rgba, GL_UNSIGNED_BYTE, *wskaźnik_na_bitmapę); Tekstura z mipmapami: glubuild2dmipmaps(gl_texture_2d, GL_RGBA, w, h, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); 3. Włączanie tekstur: glenable(gl_texture_2d); - włączanie trybu teksturowania (można go wyłączyć instrukcją gldisable(gl_texture_2d); 4. Wybieranie tekstury: glbindtexture(gl_texture_2d, numer_tekstury); - ustawienie aktywnej tekstury 5. Współrzędne tekstury: gltexcoord2f(x,y); - ustawienie współrzędnych tekstury w danym wierzchołku. Przy teksturowaniu instrukcja ta powinna być wywołana przed narysowaniem każdego wierzchołka.

OpenGL MULTITEKSTUROWANIE 1. Inicjalizacja multiteksturowania: Multiteksturowanie (wieloteksturowanie) polega nakładaniu kilku tekstur naraz na jedną powierzchnię. Obecne karty graficzne posiadają co najmniej cztery potoki teksturowania (czasem więcej), dzięki czemu każdy potok generuje inna teksturę dla renderowanego piksela. Obsługa multiteksturowania realizowana jest przez rozszerzenie: GL_ARB_multitexture. Aby z niego skorzystać należy upewnić się czy jest ono dostępne w systemie, po czym zainicjalizować. Deklaracja zmiennych potrzebnych do multiteksturowania: PFNGLMULTITEXCOORD2FARBPROC glmultitexcoord2farb = NULL; PFNGLACTIVETEXTUREARBPROC glactivetexturearb= NULL; PFNGLCLIENTACTIVETEXTUREARBPROC glclientactivetexturearb = NULL; int maxtextureunits = 0; Pobranie nazw dostępnych rozszerzeń do zmiennej znakowej extensions: char *extensions = (char*)glgetstring(gl_extensions); Sprawdzenie czy w otrzymanych nazwach rozszerzeń znajduje się GL_ARB_multitexture: if(strstr(extensions, "GL_ARB_multitexture")) jeśli tak inicjalizujemy multiteksturowanie: { pobranie ilości sprzętowych potoków teksturowania do zmiennej maxtextureunits: glgetintegerv(gl_max_texture_units_arb, &maxtextureunits); glactivetexturearb=(pfnglactivetexturearbproc)wglgetprocaddress("glactivetex turearb"); glmultitexcoord2farb=(pfnglmultitexcoord2farbproc)wglgetprocaddress("glm ultitexcoord2farb"); glclientactivetexturearb=(pfnglclientactivetexturearbproc)wglgetprocaddre ss("glclientactivetexturearb"); } 2. Ustalenie na której teksturze mają być wykonywane operacje:

Operacje na teksturach przy multiteksturowaniu są identyczne jak przy teksturowaniu1, należy tylko określić, którego potoku się tyczą. glactivetexturearb(gl_texture0_arb); - zmiana aktywnego potoku teksturowania argument: GL_TEXTUREx_ARB gdzie x jest numerem potoku, zaczynając od zera. 3. Ustawienie tekstur na obiekcie: glmultitexcoord2farb(gl_texture0_arb, 0.0f, 0.0f); - jest to odpowiednik instrukcji gltexcoord2f, z tym że pobiera także parametr, który określa dla tekstury z jakiego potoku ustawiane są współrzędne tekstury: u, v. 4. Łączenie potoków: gltexenvi(gl_texture_env, GLTEXTURE_ENV_MODE, GL_COMBINE); - dodanie do opcji środowiska tekstur parametru: GL_COMBINE gltexenvi(gl_texture_env, GL_COMBINE, parametr); - parametr może przyjąć: GL_REPLACE - w = p GL_MODULATE - w = p * o GL_ADD - w = p + o GL_ADD_SIGNED - w = p + o 0,5 GL_INTERPOLATE - w = ( p * alpha ) + ( o * ( 1 alpha ) ) GL_SUBSTRACT - w = p o GL_DOT3_RGB - w = ( pred - 0,5 ) * ( ored - 0,5 ) + ( pgreen - 0,5 ) *( ogreen - 0,5 ) + ( pblue - 0,5 ) * ( oblue - 0,5 ) w kolor wynikowy p kolor obecnie wygenerowanej tekstury o kolor poprzedniej wygenerowanej tekstury 1. Funkcja mieszania kolorów OpenGL PRZEZROCZYSTOŚĆ glblendfunc() ustawianie parametrów łączenia kolorów dla przezroczystości. Aby otrzymać przezroczystość sterowaną kanałem alfa należy ustawić funkcję z parametrami: glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA);

2. Włączanie/wyłączanie przezroczystości glenable(gl_blend) Włączanie przezroczystości gldisable(gl_blend) Wyłączanie przezroczystości 1. Ustawienia OpenGL MGŁA glfogi(gl_fog_mode, GL_LINEAR); - Ustawianie typu glfogfv(gl_fog_color, fogcolor); - Ustawianie koloru glfogf(gl_fog_start, 10.0f); - Odległość początkowa glfogf(gl_fog_end, 30.0f); - Odległość końcowa 2. Włączanie/wyłączanie glenable(gl_fog) Włączanie mgły gldisable(gl_fog) Wyłączanie mgły