Programowanie grafiki 3D Materiały, kolory i antyaliasing

Slides:



Advertisements
Podobne prezentacje
Przykład liczbowy Rozpatrzmy dwuwymiarową zmienną losową (X,Y), gdzie X jest liczbą osób w rodzinie, a Y liczbą izb w mieszkaniu. Niech f.r.p. tej zmiennej.
Advertisements

Indeksy w bazie danych Oracle
C++ wykład 2 ( ) Klasy i obiekty.
Modele oświetlenia Punktowe źródła światła Inne
Podstawy grafiki komputerowej
Badania operacyjne. Wykład 2
Kolory, grafika, multimedia
Grafika komputerowa Wykład 2 Wykorzystanie podstawowych usług bibliotecznych (API) w operacjach graficznych.
Grafika komputerowa Wykład 8 Wstęp do wizualizacji 3D
ZŁOŻONOŚĆ OBLICZENIOWA
Podstawy programowania grafiki 3D z użyciem biblioteki OpenGL
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 5: Typy porządkowe, wyliczeniowe i okrojone. Definiowanie.
Algorytm Rochio’a.
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Tablice jednowymiarowe 1
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Usuwanie zakłóceń Rysowanie w przestrzeni dyskretnej powoduje powstanie w obrazie zakłóceń (Aliasing) Metody odkłócania (Antyaliasing) zwiększenie rozdzielczości.
Obiekt bryła obrotowa (ang lathe = „tokarka”)
FALOWODY.
Programowanie grafiki 3D
Grafika wektorowa i bitmapa
Bramki Logiczne.
Przepływy w sieciach. Twierdzenie minimaksowe.
MECHANIKA NIEBA WYKŁAD r.
Podstawy programowania II
Symulacje komputerowe
W układach fizycznych napięcie elektryczne może reprezentować stany logiczne. Bramką nazywamy prosty obwód elektroniczny realizujący funkcję logiczną.
Opracowanie Dorota Libera
Grafika komputerowa Wykład 6 Podstawowe algorytmy grafiki 2D
Elementy Rachunku Prawdopodobieństwa i Statystyki
Zaawansowane techniki renderingu
ZASTOSOWANIE RENDERINGU W GRAFICE KOMPUTEROWEJ
Systemy wspomagania decyzji
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Zasady przywiązywania układów współrzędnych do członów.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
  Prof. dr hab. Janusz A. Dobrowolski Instytut Systemów Elektronicznych, Politechnika Warszawska.
MICROSOFT Access TWORZENIE MAKR
ZWIĄZKI MIĘDZY KLASAMI KLASY ABSTRAKCYJNE OGRANICZENIA INTERFEJSY SZABLONY safa Michał Telus.
Wojciech Toman. Dotychczasowe podejście do oświetlenia Idea deferred shadingu Typowe problemy wraz z propozycjami rozwiązania Optymalizacja wydajności.
Temat 5: Pozycjonowanie elementów
3dMatchGL Wykorzystanie biblioteki graficznej OpenGL przy tworzeniu gry 3DMatchGL.
FUNKCJE Opracował: Karol Kara.
Projektowanie stron WWW
Podstawy HTML RAMKi. Ramki Za ich pomocą możesz swobodnie podzielić okno przeglądarki na kilka części i w nich niezależnie przeglądać dokumenty. Ramki.
Aplikacje internetowe
PODSTAWOWE BRAMKI LOGICZNE
Regresja wieloraka.
Programowanie strukturalne i obiektowe C++
Model obiektowy bazy danych
Własności bramek logicznych RÓZGA DARIUSZ 20061
Zagadnienia AI wykład 2.
Beata Sanakiewicz. Spis treści  Łączenie dokumentów Łączenie dokumentów  Mechanizm OLE Mechanizm OLE  Obiekt osadzony Obiekt osadzony  Obiekt połączony.
PHP Instrukcja warunkowa if Damian Urbańczyk. Warunek? Instrukcję warunkową wykorzystujemy wtedy, gdy chcemy sprawdzić pewien fakt, który może być prawdziwy.
Zasady arytmetyki dwójkowej
Formatowanie dokumentów
WYKŁAD 5 OPTYKA FALOWA OSCYLACJE I FALE
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
Wykład 4 Dr Aneta Polewko-Klim Dr Aneta Polewko-Klim
O ODPORNOŚCI KONWENCJONALNEGO OBSERWATORA LUENBERGERA ZREDUKOWANEGO RZĘDU Ryszard Gessing Instytut Automatyki Politechnika Śląska.
Liczby naturalne i całkowite Spis treści Definicje Działania na liczbach Wielokrotności liczb naturalnych Cechy podzielności Przykłady potęg,potęgi o.
FIGURY PŁASKIE.
Wiązania (joints) Malwina Łagód.
Opracował Tomasz Durawa
Selekcja danych Korelacja.
Format rozkazu Tryby adresowania.
PGO Przeciążanie metod i konstruktorów
Zapis prezentacji:

Programowanie grafiki 3D Materiały, kolory i antyaliasing Mieszanie kolorów Efekt mgły Antyaliasing

Materiały Właściwości materiałów ustala się wywołując funkcje: void glMaterialf(GLenum face, GLenump name, GLfloat param) void glMateriali(GLenum face, GLenump name, GLint param) void glMaterialfv(GLenum face, GLenump name, const GLfloat *params) void glMaterialiv(GLenum face, GLenump name, const GLint *params) Parametr face ustala, której strony wielokąta dotyczy modyfikowana własność i może przyjmować wartości: GL_FRONT, GL_BACK i GL_FRONT_AND_BACK. Poszczególne własności materiałów mogą być definiowane niezależnie dla każdego wierzchołka na podstawie koloru wierzchołka. Jest to tzw. śledzenie kolorów. Ustalenia, która własność będzie związana z kolorem wierzchołków dokonujemy w funkcji: void glColorMaterial(GLenum face, GLenum mode) Parametr mode może przyjmować wartości: GL_EMISSION, GL_DIFFUSE, GL_SPECULAR, GL_AMBIENT_AND_DIFFUSE. Ich znaczenie opisano w tabeli na następnym slajdzie.

Materiały pname znaczenie GL_AMBIENT Składowe RGBA określające stopień odbicia światła otaczającego. GL_DIFFUSE Składowe RGBA określające stopień rozproszenia światła rozproszonego. GL_AMBIENT_AND_DIFFUSE Wspólna wartość dla obydwu powyższych. GL_SPECULAR Składowe RGBA określające stopień odbicia światła odbitego. GL_SHININESS Wartość z zakresu <0;1> określająca stopień połyskliwości. GL_EMISSION Składowe określające stopień emisji światła. Światło pochodzące z takiego obiektu nie oświetla innych obiektów. GL_COLOR_INDEXES Używane w indeksowanym trybie kolorów.

Materiały pname wartości domyślne GL_AMBIENT GL_DIFFUSE GL_AMBIENT_AND_DIFFUSE GL_SPECULAR (0,0,0,1) GL_SHININESS GL_EMISSION GL_COLOR_INDEXES (0,0,1)

Materiały Odczyt własności bieżącego materiału umożliwiają funkcje: void glGetMaterialfv (GLenum face, GLenump name, GLfloat *params) void glGetMaterialv (GLenum face, GLenump name, GLint *params) Chrom złoto czarny plastik GL_AMBIENT (0.25, 0.25, 0.25) (0.25, 0.20, 0.07) (0.00, 0.00, 0.00) GL_DIFFUSE (0.40, 0.40, 0.40) (0.75, 0.61, 0.23) (0.01, 0.01, 0.01) GL_SPECULAR (0.77, 0.77, 0.77) (0.63, 0.56, 0.37) (0.50, 0.50, 0.50) GL_SHININESS 76.8 52.2 32.0

Materiały Kilka porad jak tworzyć własne materiały: dielektryki stosunkowo niska zdolność odbijania światła i niezależna od długości fali niektóre dielektryki są przezroczyste GL_AMBIENT, GL_DIFFUSE i GL_SPECULAR mają zazwyczaj podobne wartości dielektryki sproszkowane zazwyczaj wydają się szare metale są nieprzezroczyste i silnie odbijają światło zazwyczaj kolory światła odbitego i rozpraszanego są dla nich takie same różne metale w różny sposób odbijają różne długości fali metale zazwyczaj mają duże wartości GL_DIFFUSE i wyraźnie mniejsze GL_AMBIENT GL_SPECULAR zależy od konkretnego metalu, jednak najsilniejsza składowa raczej nie powinna być mniejsza niż 0.5 materiały kompozytowe plastiki, farby, pigmenty –własności pośrednie między metalami i dielektrykami GL_AMBIENT i GL_DIFFUSE przypominają metal GL_SPECULAR są raczej podobne do dielektryków inne materiały

Mieszanie kolorów Standartowo biblioteka OpenGL stawiając punkt w buforze koloru zastępuje kolor wcześniej tam obecny nowym. Włączając tryb mieszania kolorów (ang. alpha blending) funkcją: glEnable(GL_BLEND); możemy sprawić, że kolory nie będą zastępowane, tylko mieszane w określony sposób. Tryb mieszania kolorów ustalamy funkcją (dostępna jako rozszerzenie ARB): void glBlendEquation(GLenummode); Dodatkowo można zdefiniować inny sposób mieszania dla składowych RGB i inny dla kanału alfa: void glBlendEquationSeparate(GLenum modeRGB, GLenum modeAlpha); Niech: (RS, GS, BS, AS) - oznaczają składowe koloru źródłowego (RD, GD, BD, AD) - oznaczają składowe koloru docelowego (αR, αG, αB, αA) - oznaczają współczynniki mieszania koloru źródłowego (βR, β G, β B, β A) - oznaczają współczynniki mieszania koloru docelowego

Mieszanie kolorów GL_FUNC_ADD GL_MIN GL_FUNC_SUBTRACT GL_MAX GL_FUNC_REVERSE_SUBTRACT GL_LOGIC_OP

Mieszanie kolorów GL_FUNC_ADD GL_MIN GL_FUNC_SUBTRACT GL_MAX GL_FUNC_REVERSE_SUBTRACT GL_LOGIC_OP Użycie operacji logicznych musi zostać poprzedzone ich włączeniem: glEnable(GL_COLOR_LOGIC_OP);

Mieszanie kolorów Wyboru operacji logicznej dokonujemy: void glLogicOp(GLenum opcode); opcode operacja GL_CLEAR GL_OR SvD GL_SET 1 GL_NOR ~(SVD) GL_COPY S GL_XOR SxD GL_COPY_INVERTED ~S GL_EQUIV ~(SxD) GL_NOOP D GL_AND_REVERSE S^(~D) GL_INVERT ~D GL_AND_INVERTED (~S)^D GL_AND S^D GL_OR_REVERSE Sv(~D) GL_NAND ~(S^D) GL_OR_INVERTED (~S)vD S - oznaczają składowe koloru źródłowego, a D - składowe koloru docelowego

Mieszanie kolorów Współczynniki mieszania kolorów wybieramy funkcją: void glBlendFunc(GLenum src, GLenum dst); gdzie src odpowiada (αR, αG, αB, αA) , a dst odpowiada (βR, β G, β B, β A) . Można przydzielić inne współczynniki do kanałów RGB i inne do kanału alfa: void glBlendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); Przy niektórych współczynnikach można używać własnych ustawień koloru (RW, GW, BW, AW). Wartości składowych tego koloru ustawiamy funkcją : void glBlendColor(GLclampf Rw, GLclampf Gw, GLclampf Bw, GLclampf Aw);

współczynnik mieszania Mieszanie kolorów parametr współczynnik mieszania GL_ZERO (0, 0, 0, 0) GL_ONE (1, 1, 1, 1) GL_SRC_COLOR (RS, GS, BS, AS) GL_ONE_MINUS_SRC_COLOR (1-RS, 1-GS, 1-BS, 1-AS) GL_DST_COLOR (RD, GD, BD, AD) GL_ONE_MINUS_DST_COLOR (1-RD, 1-GD, 1-BD, 1-AD) GL_SRC_ALPHA (AS, AS, AS, AS) GL_ONE_MINUS_SRC_ALPHA (1-AS, 1-AS, 1-AS, 1-AS) GL_DST_ALPHA (AD, AD, AD, AD) GL_ONE_MINUS_DST_ALPHA (1-AD, 1-AD, 1-AD, 1-AD) GL_CONSTANT_COLOR (RW, GW, BW, AW) GL_ONE_MINUS_CONSTANT_COLOR (1-RW, 1-GW, 1-BW, 1-AW) GL_CONSTANT_ALPHA (AW, AW, AW, AW) GL_ONE_MINUS_CONSTANT_ALPHA (1-AW, 1-AW, 1-AW, 1-AW) GL_SRC_ALPHA_SATURATE * (f, f, f, 1) gdzie f = min(AS, 1-AD) * może być użyty tylko jako współczynnik mieszania koloru źródłowego

Mieszanie kolorów Mieszanie kolorów można ograniczyć tylko do tych punktów, które spełniają określony warunek na kanale alfa. Rodzaj testu na kanale alfa ustawiany jest funkcją: void glAlphaFunc(GLenum func, GLclampf ref); gdzie ref jest wartością w stosunku do której wykonywany będzie test kanału alfa , a func określa rodzaj wykonywanego testu i może przyjmować jedną z wartości: GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, GL_ALWAYS Testowanie kanału alfa należy włączyć: void glEnable(GL_ALPHA_TEST);

Efekt mgły Efekt mgły polega na specyficznym mieszaniu kolorów z bufora koloru z kolorem mgły według ustalonego równania „gęstnienia” mgły. Przed użyciem efekt mgły należy włączyć: glEnable(GL_FOG); Parametry mgły ustalamy jedną z funkcji: void glFogf(GLenum pname, GLfloat param); void glFogi(GLenum pname, GLint param); void glFogfv(GLenum pname, const GLfloat *params); void glFogiv(GLenum pname, const GLint *params); Parametry określające mgłę to: • GL_FOG_MODE mogący przyjmować wartości: GL_LINEAR, GL_EXP, GL_EXP2 • GL_FOG_COORD_SRC mogący przyjmować wartości: GL_FOG_COORD, GL_FRAGMENT_DEPTH • GL_FOG_DENSITY • GL_FOG_START i GL_FOG_END • GL_FOG_COLOR (lub w trybie indeksowanym GL_FOG_INDEX)

Efekt mgły Składowe koloru wyliczane są według równania: C=f·CS+(1-f)·CFog. Przy czym współczynnik f zależy od wybranego trybu symulacji mgły i jest wyliczany w następujący sposób: tryb sposób wyliczania GL_LINEAR (zwykła mgła) GL_EXP (gęsta mgła lub chmury) GL_EXP2 (dym) Gdy GL_FOG_COORD_SRC jest ustawiony na GL_FRAGMENT_DEPTH zmienna z zależy od odległości danego fragmentu od obserwatora, a generowana wówczas mgła nazywana jest mgłą głębokościową (albo odległościową).

Efekt mgły Jeśli GL_FOG_COORD_SRC ustawione jest na GL_FOG_COORD, wówczas parametry mgły mogą być ustalone niezależnie dla każdego wierzchołka prymitywu. Generowana wówczas mgła nazywana jest mgłą objętościową. Współrzędne mgły dla poszczególnych wierzchołków definiują funkcje: void glFogCoordf(GLfloat coord); void glFogCoordd(GLdouble coord); void glFogCoordfv(const GLfloat *coord); void glFogCoorddv(const GLdouble *coord); Jakość generowanej mgły określamy wywołując funkcję: void glHint(GLenum target, GLenum mode); pierwszym argumentem musi być GL_FOG_HINT, drugi natomiast może przyjmować wartość: GL_FASTEST, wtedy mgła liczona jest dla każdego wierzchołka lub GL_NICEST wówczas mgła będzie liczona dla każdego punktu

Antyaliasing Podstawowy antyaliasing w OpenGL możemy niezależnie włączać i wyłączać przy rysowaniu punktów, linii oraz wielokątów: glEnable (GL_POINT_SMOOTH); glEnable (GL_LINE_SMOOTH); glEnable (GL_POLYGON_SMOOTH);* W pierwszych dwóch przypadkach należy włączyć mieszanie kolorów w trybie: glBlendFunction(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); W trzecim przypadku tryb mieszania kolorów powinien wyglądać następująco: glBlendFunction(GL_SRC_ALPHA_SATURATE,GL_ONE); W tym ostatnim przypadku, przy inicjalizacji okna OpenGL należy również włączyć kanał alfa w buforze ramki: glutInitDisplayMode(*|GLUT_ALPHA); Implementacja OpenGL może, ale nie musi udostępniać kanał alfa w buforze ramki. Jeśli zmienna stanu GL_ALPHA_BITS jest równa zero to oznacza, że kanał alfa nie jest dostępny. *ta ostatnia operacja dotyczy jedynie rysowania wypełnionych wielokątów, w przypadku rysowania punktami lub liniami wystarczają dwie poprzednie funkcje

Antyaliasing Włączenie antyaliasingu metodą nadpróbkowania (ang. oversampling): glEnable(GL_MULTISAMPLE); całkowicie dezaktywuje podstawowe metody antyaliasingu dla punktów, linii i wielokątów. Wykorzystanie tej techniki wymaga wcześniej dołączenia buforu nadpróbkowywania do buforu ramki: glutInitDisplayMode(*|GLUT_MULTISAMPLE);

test