Grafika komputerowa. Potok graficzny 3D. Radosław Mantiuk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny

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

Scena 3D. Cieniowanie (ang. Shading) Scena 3D - Materia" Obliczenie koloru powierzchni (ang. Lighting)

Potok graficzny. System graficzny. Potok graficzny 3D. O$wietlenie globalne i lokalne. scena 3D algorytm graficzny obraz 2D. czasu rzeczywistego

Technologie Informacyjne

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

OpenGL model oświetlenia

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

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

Rasteryzacja (ang. rasterization or scan-conversion) Grafika rastrowa. Rysowanie linii (1) Rysowanie piksela

Rzutowanie DOROTA SMORAWA

Modelowanie obiektów 3D

Plan wykładu. Akcelerator 3D Potok graficzny

Bogusław Jackowski GRAFIKA DYSKRETNA BACHOTEK 1998

Rasteryzacja (ang. rasterization or scan-conversion) Grafika rastrowa. Rysowanie linii (1) Rysowanie piksela. Rysowanie linii: Kod programu

6 Przygotował: mgr inż. Maciej Lasota

Transformacje obiektów 3D

2 Przygotował: mgr inż. Maciej Lasota

Materiały. Dorota Smorawa

WYKŁAD 8. Postacie obrazów na różnych etapach procesu przetwarzania

Gry komputerowe: efekty specjalne cz. 2

Prosty program- cpp. #include <GL/glut.h>

ROZWIĄZANIA ZADAŃ Zestaw P3 Odpowiedzi do zadań zamkniętych

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

Teksturowanie (ang. texture mapping)

Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2013/2014. Forma studiów: Stacjonarne Kod kierunku: 11.

GRK 4. dr Wojciech Palubicki

Skróty klawiaturowe Photoshop 7CE

Grafika Komputerowa Wykład 4. Synteza grafiki 3D. mgr inż. Michał Chwesiuk 1/30

PODSTAWY DZIAŁANIA UKŁADÓW CYFROWYCH

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 6

Wprowadzenie. Artur Staszczyk Bartłomiej Filipek

Instrumenty wirtualne z LabVIEW. Akademia Górniczo - Hutnicza im.stanisława Staszica w Krakowie, Wydział Inżynierii Materiałowej i Ceramiki

PRZETWORNIK NAPIĘCIE - CZĘSTOTLIWOŚĆ W UKŁADZIE ILORAZOWYM

Ćwiczenie nr 2 Zbiory rozmyte logika rozmyta Rozmywanie, wnioskowanie, baza reguł, wyostrzanie

Temat: Transformacje 3D

GRAFIKA KOMPUTEROWA. Plan wykładu. 1. Początki grafiki komputerowej. 2. Grafika komputerowa a dziedziny pokrewne. 3. Omówienie programu przedmiotu

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

Gry komputerowe, Informatyka N1, III Rok

Wykład 4. Rendering (1) Informacje podstawowe

1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych

GRAFIKA CZASU RZECZYWISTEGO Podstawy syntezy grafiki 3D i transformacji geometrycznych

Podstawy programowania gier 3D Podstawy Direct3D

Odpowiedzi i schematy oceniania Arkusz 23 Zadania zamknięte. Wskazówki do rozwiązania. Iloczyn dwóch liczb ujemnych jest liczbą dodatnią, zatem

KONKURSY MATEMATYCZNE. Treść zadań

Tytu : GRAPHER Podr cznik u ytkownika ISBN: Autor: Zbigniew Galon Rok wydania: 2009 Stron: 408 Wydawca: Gambit COiS Sp. z o.o.

Pomiary geofizyczne w otworach

Synteza i obróbka obrazu. Grafika komputerowa ROZWIĄZANIA SPRZĘTOWE I PROGRAMISTYCZNE

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

WPROWADZENIE DO GRAFIKI KOMPUTEROWEJ

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

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

Transformator Elektroniczny do LED 0W-40W Współpracuje z inteligentnymi ściemniaczami oświetlenia. Instrukcja. Model: TE40W-DIMM-LED-IP64

Przekształcenia geometryczne. Dorota Smorawa

Techniki generowania cieni w grafice 3D z użyciem OpenGL

PLANIMETRIA. Poziom podstawowy

Poznaj potencjał ArchiCAD-a! Twój przewodnik po programie ArchiCAD!

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

OpenGL Światło (cieniowanie)

Formularz oferty. (Wypełniają jedynie Wykonawcy składający wspólną ofertę)

Julia 4D - raytracing

Rok akademicki: 2015/2016 Kod: RBM s Punkty ECTS: 3. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

OpenGL Światło (cieniowanie)

Wykład 4 Wybrane zagadnienia programowania w C++

Zadanie I. 2. Gdzie w przestrzeni usytuowane są punkty (w której ćwiartce leży dany punkt):

OPEN_GL LABORATORIUM 6. tekst na podstawie: Edwarda Angela oraz Łukasza Grabca

Grafika komputerowa i wizualizacja. dr Wojciech Pałubicki

PROGRAM ZAJĘĆ INFORMATYCZNYCH NIE TYLKO GG REALIZOWANYCH W RAMACH PROJEKTU RADOŚĆ UCZENIA SIĘ

ECDL Advanced Moduł AM3 Przetwarzanie tekstu Syllabus, wersja 2.0

Grafika komputerowa i wizualizacja

Zmiany w programie C GEO v. 6.5

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

OpenGL - Open Graphics Library. Programowanie grafiki komputerowej. OpenGL 3.0. OpenGL - Architektura (1)

SPRAWDZIANY Z MATEMATYKI

Załącznik KARTA PRZEDMIOTU. KARTA PRZEDMIOTU Wydział Automatyki, Elektroniki i Informatyki, Rok akademicki: 2009/2010 KOMPUTEROWA

PRAKTYKA PRZETWARZANIA OBRAZU W PROGRAMIE MATLAB

Wytyczne dla środków masowego przekazu

Praca na wielu bazach danych część 2. (Wersja 8.1)

INTERAKTYWNA APLIKACJA MAPOWA MIASTA RYBNIKA INSTRUKCJA OBSŁUGI

INSTRUKCJA. zabawka i gra edukacyjna. rekomendowany wiek: od lat 4. liczba graczy: 1-6

Intellect. Business Intelligence. Biblioteka dokumentów Podręcznik. Business Intelligence od 2Intellect.com Sp. z o.o.

Tekst ozdobny i akapitowy

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

PRECYZYJNA ANALIZA RUCHU GAŁEK OCZNYCH

Bartosz Bazyluk OpenGL Współczesne podejście do programowania grafiki Część II: Programy cieniujące (shadery)

Podstawowe pojęcia: Populacja. Populacja skończona zawiera skończoną liczbę jednostek statystycznych

Oświetlenie obiektów 3D

Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.

Politechnika Krakowska im. Tadeusza Kościuszki. Karta przedmiotu. obowiązuje studentów rozpoczynających studia w roku akademickim 2015/16 t

Tester pilotów 315/433/868 MHz MHz

Zakres pracy Przedstawienie wiedzy teoretycznej z zakresu konstrukcji reflektorów samochodowych Przegląd konstrukcji reflektorów oraz opis rozwoju ośw

Programowanie obrabiarek CNC. Nr H8

Harmonogramowanie projektów Zarządzanie czasem

1. MONITOR. a) UNIKAJ! b) WYSOKOŚĆ LINII OCZU

Spis treści. 1. Znak Konstrukcja symbolu Budowa znaku Kolorystyka wersja podstawowa Kolorystyka wersja czarno-biała...

22 PRĄD STAŁY. CZĘŚĆ 1

FD360IR Kamera wysokiej rozdzielczości 6 MP typu rybie oko z D/N i IR

Bazy danych. Andrzej Łachwa, UJ, /15

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

Temat: Funkcje. Własności ogólne. A n n a R a j f u r a, M a t e m a t y k a s e m e s t r 1, W S Z i M w S o c h a c z e w i e 1

Transkrypt:

Potok graficzny 3D Radosław Mantiuk Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny

Eksperyment Rafal Piórkowski rpiorkowski@wi.zut.edu.pl

System graficzny scena 3D algorytm graficzny obraz 2D Dane wejściowe Algorytm tworzący obraz wyjściowy na podstawie sceny 3D Dane wyjściowe System graficzny czasu rzeczywistego Oświetlenie lokalne

Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D. - Definicja geometrii obiektów 3D. - Definicja materiałów pokrywających obiekty. - Kolor powierzchni obiektów. - Tekstura. - Własności powierzchni. - Kamera. - Źródła światła. - Parametry środowiska (mgła, dym, itp.). OBIEKTY Scena 3D KAMERA ŚWIATŁO

Sceny 3D - Parametry środowiska Parametryzacja przestrzeni sceny. Mgła

Scena 3D - Reprezentacje geometrii obiektów Reprezentacja obiektów geometrycznych - obiekty parametryczne opisane równaniami matematycznymi, - reprezentacja wielokątowa, - obiekty złożone, - reprezentacja fraktalna, - krzywe i powierzchnie, - obiekty CSG.

Scena 3D - Modelowanie 3D

Scena 3D - Reprezentacja wielokątowa (1)! Trójkąt - obiekt podstawowy (współpłaszczyznowość wierzchołków trójkąta)! Duża liczba identycznych obiektów: wykorzystanie tych samych algorytmów do przetwarzania wszystkich obiektów (architektura SIMD kart graficznych).! Ograniczona dokładkość odwzorowania powierzchni krzywoliniowych (aproksymacje powierzchni krzywoliniowych).! Duża liczba obiektów potrzebna do zbudowania prostego kształtu geom. (przykład kuli).

Scena 3D - Reprezentacja wielokątowa (2) Optymalizacja reprezentacji wielokątowej - unikanie powtórzeń definicji wierzchołków. konfiguracja strip konfiguracja fan v10 v9 v8 konfiguracja mesh

Scena 3D - Reprezentacja hierarchiczna Obiekty złożone składają się z wielu obiektów podstawowych. Powtarzające się elementy reprezentowane są za pomocą transformacji geometrycznych. Courtesy of Andries van Dam

Potok graficzny czasu rzeczywistego Aplikacja Przetwarzanie geometrii Rasteryzacja

Transformacje geometrii

OpenGL: Reprezentacja obiektów - trójkąty Definiowanie trójkąta (ang. triangle) oraz czworoboku (ang. quad). glbegin(gl_triangles); glend(); glvertex3f( 0.0f, +1.0f, 0.0f ); glvertex3f( -1.0f, 0.0f, 0.0f ); glvertex3f( +1.0f, -1.0f, 0.0f ); glbegin(gl_quads); glnormal3f( 0, 0, -1.0f ); gltexcoord2f( 1.0f, 1.0f ); glvertex3f( -0.5f, +0.5f, -0.5f ); gltexcoord2f( 0.0f, 1.0f ); glvertex3f( +0.5f, +0.5f, -0.5f ); gltexcoord2f( 0.0f, 0.0f ); glvertex3f( +0.5f, -0.5f, -0.5f ); gltexcoord2f( 1.0f, 0.0f ); glvertex3f( -0.5f, -0.5f, -0.5f ); glend(); glutsolidsphere()

OpenGL: Tworzenie obiektów

OpenGL: Tworzenie obiektów glutsolidcube(1)

OpenGL: Tworzenie obiektów glscalef( 1.5f, 3.0f, 1.5f ); glutsolidcube(1);

OpenGL: Tworzenie obiektów glrotatef( 10.0f, 0.0f, 1.0f, 0.0f ); glrotatef( 60.0f, 1.0f, 0.0f, 0.0f ); glscalef( 1.5f, 3.0f, 1.5f ); glutsolidcube(1);

OpenGL: Tworzenie obiektów gltranslatef( 1.0f, 1.0f, 0.0f ); glrotatef( 10.0f, 0.0f, 1.0f, 0.0f ); glrotatef( 60.0f, 1.0f, 0.0f, 0.0f ); glscalef( 1.5f, 3.0f, 1.5f ); glutsolidcube(1);

OpenGL: Tworzenie obiektów macierz transformacji obiektów! " x ' y ' z ' 1 $! = % " r 11 s x r 12 r 13 t x r 21 r 22 s y r 23 t y r 31 r 32 r 33 s z t z 0 0 0 1 $! % " x y z 1 $ % glmatrixmode( GL_MODELVIEW ); glloadidentity(); glpushmatrix(); glpopmatrix(); gltranslatef( 1.0f, 1.0f, 0.0f ); glrotatef( 10.0f, 0.0f, 1.0f, 0.0f ); glrotatef( 60.0f, 1.0f, 0.0f, 0.0f ); glscalef( 1.5f, 3.0f, 1.5f ); glutsolidcube(1);

OpenGL: Kolejność przekształceń M' = M * R * T glrotatef( 45.0f, 0.0f, 0.0f, 1.0f ); gltranslatef( 2.0f, 0.0f, 0.0f ); glutwirecube( 1 ); M' = M * T * R gltranslatef( 2.0f, 0.0f, 0.0f ); glrotatef( 45.0f, 0.0f, 0.0f, 1.0f ); glutwirecube( 1 );

OpenGL: hierarchia obiektów glpushmatrix(); glrotatef( 20.0f, 0.0f, 1.0f, 0.0f ); glrotatef( 10.0f, 1.0f, 0.0f, 0.0f ); glpushmatrix(); glscalef( 0.7f, 0.7f, 0.7f ); gltranslatef( 1.2f, 1.0f, 0.0f ); glutwiresphere( 1, 20, 20 ); glpopmatrix(); glpushmatrix(); glscalef( 0.7f, 0.7f, 0.7f ); gltranslatef( -1.2f, 1.0f, 0.0f ); glutwiresphere( 1, 20, 20 ); glpopmatrix(); glpushmatrix(); glscalef( 0.5f, 1.0f, 1.0f ); gltranslatef( 0.0f, -0.7f, 0.0f ); glutwirecube( 1 ); glpopmatrix(); glpushmatrix(); glscalef( 2.0f, 0.5f, 1.0f ); gltranslatef( 0.0f, -3.5f, 0.0f ); glutwirecube( 1 ); glpopmatrix(); glpopmatrix();

Kamera otworkowa (ang. pinhole camera) Kamera komputerowa symuluje kamerę otworkową z nieskończenie małym otworem przesłony, bez soczewek.

Scena 3D: Definicja kamery! Definiuje jaka część przestrzeni trójwymiarowej będzie widoczna na wyjściowym obrazie 2D.! Określa sposób rzutowania (prostokątne, perspektywiczne, itp.). up lookp! kąt patrzenia FOV (ang. Field of View)! punkt położenia kamery! punkt, na który patrzy kamera! orientacja obrazu! aspekt (ang. aspect ratio) fovy eyep Courtesy of Andries van Dam

Scena 3D: Field of View kąt patrzenia (FOV) powierzchnie obcinające (ang. clipping planes) Courtesy of Andries van Dam

OpenGL: Kamera macierz projekcji (GL_PROJECTION) glmatrixmode(gl_projection); glloadidentity(); gluperspective( fovy, aspect, znear, zfar ); glmatrixmode(gl_modelview); glloadidentity(); glulookat( eyepx, eyepy, eyepz, lookpx, lookpy, lookpz, upx, upy, upz ); Y up lookp zfar X eyep Z znear gluperspective( 50, 1, 1, 1000); glulookat( 0, 0, 7, 0, 0, 0, 0, 1, 0 );

OpenGL: Transformacje geometryczne dane wierzchołków macierz ModelView macierz Projection dzielenie przez w transformacja okna widzenia współ. obiektu współ. kamery współ. obcinania współ. znormal. (NDC) współ. ekranu (rastra)

OpenGL: Transformacja z układu modelu do widoku dane wierzchołków M ModelView = M View * M Model współ. obiektu macierz ModelView współ. kamery glulookat(...) glscale() gltranslate() glrotate() macierz Projection dzielenie przez w transformacja okna widzenia współ. obcinania współ. znormal. (NDC)! " x cam y cam z cam 1 $! = M modelview % " x obj y obj z obj 1 $! = M view M model % " x obj y obj z obj 1 $ % współ. ekranu (rastra)

OpenGL: Transformacja z układu modelu do widoku dane wierzchołków macierz ModelView macierz Projection dzielenie przez w transformacja okna widzenia współ. obiektu współ. kamery współ. obcinania współ. znormal. (NDC) współ. ekranu (rastra)

OpenGL: Rzutowanie oraz clipping dane wierzchołków współ. obiektu Macierz GL_PROJECTION gluperspective(...) macierz ModelView macierz Projection współ. kamery void gluperspective(double fovy, double aspectratio, double front, double back) { const double DEG2RAD = 3.14159265 / 180; dzielenie przez w transformacja okna widzenia współ. obcinania współ. znormal. (NDC) współ. ekranu (rastra) } double tangent = tan(fovy/2 * DEG2RAD); // tangent of half fovy double height = front * tangent; // half height of near plane double width = height * aspectratio; // half width of near plane // params: left, right, bottom, top, near, far glfrustum(-width, width, -height, height, front, back);

OpenGL: Rzutowanie oraz clipping dane wierzchołków Macierz GL_PROJECTION współ. obiektu macierz ModelView współ. kamery macierz Projection współ. obcinania dzielenie przez w współ. znormal. (NDC) transformacja okna widzenia współ. ekranu (rastra)! " x clip w y clip w z clip w w! $ = % " 2 near right left 0 0 2 near bottom top 0 0 (right + left) right left (bottom + top) bottom top far + near far near 0 0 2 near far far near 0 0 1 0 $! " % x cam y cam z cam 1 $ %

OpenGL: Rzutowanie oraz clipping gluortho2d(...) dane wierzchołków Rzut perspektywiczny współ. obiektu macierz ModelView współ. kamery macierz Projection dzielenie przez w współ. obcinania Rzut prostokątny transformacja okna widzenia współ. znormal. (NDC) współ. ekranu (rastra) gluortho2d(...)

OpenGL: Clipping (obcinanie) dane wierzchołków współ. obiektu macierz ModelView Clipping usuwanie obiektów znajdujących się poza polem widzenia, obiekty częściowo znajdujące się w polu widzenia są dzielone na mniejsze macierz Projection dzielenie przez w transformacja okna widzenia współ. kamery współ. obcinania współ. znormal. (NDC) współ. ekranu (rastra) Culling - usuwanie obiektów zasłoniętych przez inne obiekty (np. ang. backface culling).

OpenGL: NDC oraz współrzędne ekranu dane wierzchołków współ. obiektu macierz ModelView współ. kamery macierz Projection Normalised Device Coordinates (NDC)! " x ndc y ndc z ndc $! = % " x clip / w y clip / w z clip / w $ % dzielenie przez w transformacja okna widzenia współ. obcinania współ. znormal. (NDC) współ. ekranu (rastra)

OpenGL: NDC oraz współrzędne ekranu dane wierzchołków współ. obiektu macierz ModelView współ. kamery macierz Projection współ. obcinania dzielenie przez w Współrzędne ekranu: x w = x +1 ndc width 2 y w = y +1 ndc height 2 (0,0) transformacja okna widzenia współ. znormal. (NDC) współ. ekranu (rastra) (w,h)

OpenGL: NDC oraz współrzędne ekranu dane wierzchołków macierz ModelView macierz Projection dzielenie przez w transformacja okna widzenia współ. obiektu współ. kamery współ. obcinania współ. znormal. (NDC)! " x w y w z w Współrzędne okna na ekranie: glviewport(x, y, w, h);! $ = % " width x ndc + (x + width 2 2 ) height y ndc + (y + height ) 2 2 far near far + near z ndc + 2 2 $ % współ. ekranu (rastra)

Model oświetlenia

Scena 3D: Źródła światła (1) Emisja fali elektromagnetycznej w zakresie widzialnym. światło punktowe (point light) światło kierunkowe (distant light) światło stożkowe (spot light)

Scena 3D: Źródła światła (2) Naturalne źródła światła - generowanie miękkich cieni (ang. soft shadows). światło liniowe (linear light) światło powierzchniowe (area light)

OpenGL: Punktowe źródła światła glenable( GL_NORMALIZE ); // włączenie automatycznej normalizacji wektorów po skalowaniu float g_lightpos[4] = { 0.0f, 0.0f, 2.0f, 1.0f }; gllightfv(gl_light1, GL_POSITION, g_lightpos); GLfloat color[] = { 1.0f, 1.0f, 1.0f }; gllightfv(gl_light1, GL_AMBIENT, color); gllightfv(gl_light1, GL_DIFFUSE, color); gllightfv(gl_light1, GL_EMISSION, color); gllightfv(gl_light1, GL_SPECULAR, color); glenable(gl_light1); glenable(gl_lighting);

OpenGL: Kierunkowe źródła światła glenable( GL_NORMALIZE ); // włączenie automatycznej normalizacji wektorów po skalowaniu float g_lightdir[4] = { 0.0f, 0.0f, -1.0f, 0.0f }; gllightfv(gl_light1, GL_POSITION, g_lightpos); GLfloat color[] = { 1.0f, 1.0f, 1.0f }; gllightfv(gl_light1, GL_AMBIENT, color); gllightfv(gl_light1, GL_DIFFUSE, color); gllightfv(gl_light1, GL_EMISSION, color); gllightfv(gl_light1, GL_SPECULAR, color); glenable(gl_light1); glenable(gl_lighting);

OpenGL: Źródła światła typu spot glenable( GL_NORMALIZE ); // włączenie automatycznej normalizacji wektorów po skalowaniu float g_lightpos[4] = { 0.0f, 0.0f, 2.0f, 1.0f }; gllightfv(gl_light1, GL_POSITION, g_lightpos); GLfloat color[] = { 1.0f, 1.0f, 1.0f }; gllightfv(gl_light1, GL_AMBIENT, color); gllightfv(gl_light1, GL_DIFFUSE, color); gllightfv(gl_light1, GL_EMISSION, color); gllightfv(gl_light1, GL_SPECULAR, color); // dodatkowe parametry gllightf(gl_light0,gl_spot_cutoff,95.0); // kąt odcięcia pola świecenia gllightf(gl_light0,gl_spot_exponent,2.0); // współczynnik osłabienia gllightfv(gl_light0,gl_spot_direction,spotdir); // kierunek świecenia glenable(gl_light1); glenable(gl_lighting);

Scena 3D: Materiał Dla materiałów definiuje się ich własności odbijania światła. ambient diffuse specular ambinet + diffuse ambinet + diffuse + specular

OpenGL: Materiał float colw[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; glmaterialfv( GL_FRONT, GL_SPECULAR, colw); glmaterialf( GL_FRONT, GL_SHININESS, 40.0f ); float col[4] = { 0.01f, 0.6f, 0.01f, 1.0f }; glmaterialfv( GL_FRONT, GL_DIFFUSE, col); float cola[4] = { 0.01f, 0.2f, 0.01f, 1.0f }; glmaterialfv( GL_FRONT, GL_AMBIENT, cola);

Scena 3D: Materiał - Rodzaje powierzchni Własności powierzchni obiektów: - powierzchnie rozpraszające, - powierzchnie odbijające (lustrzane), - powierzchnie załamujące (przezroczyste). α powierzchnia rozpraszająca (ambient + diffuse + specular) α α powierzchnia odbijająca - kąt padania równy jest kątowi odbicia β powierzchnia załamująca

Rasteryzacja

Rasteryzacja (ang. rasterization) Operacje wykonywane w przestrzeni rastrowej, prowadzące do obliczenia koloru RGB wszystkich pikseli wyjściowego obrazu rastrowego i umieszczenie ich we buforze ramki (ang. frame buffer). Przygotowanie danych trójkątów (ang. triangle setup) Wypełnianie trójkątów (ang. scan conversion) Cieniowanie pikseli (ang. pixel shading) Łączenie danych (ang. merging)

Wypełnianie trójkątów (ang. scan conversion) Określanie, które fragmenty trókątów należą do poszczególnych pikseli obrazu.

Rasteryzacja trójkąta - Ang. Edge walking Brzegowa (ang. edge walking) 1. Posortowanie wierzchołków w kierunkach x i y, wybranie kierunku wypełniania (np. z lewej do prawej i z góry na dół). 2. Obliczenie pikseli brzegowych dla każdej poziomej linii (ang. spans). 3. Wypełnianie liniami poziomymi od punktu p0 do p2. Bardzo szybki algorytm. Pictures courtesy of MIT (lecture 6.837)

Cieniowanie pikseli (ang. pixel shading) Obliczanie kolorów fragmentów trójkątów.

Teksturowanie Modyfikacja koloru pikseli

Łączenie danych (ang. merging) Obliczenie koloru RGB pikseli na podstawie danych fragmentów poszczególnych trójkątów obejmujących ten piksel. Umieszczenie danych w buforze kolorów/ramki (ang. frame buffer) Obliczanie widoczności (bufor Z). Obliczanie przezroczystości (kanał Alfa). Mieszanie za pomocą bufora szablonu (ang. stencil buffer). Wykorzystanie bufora akumulacyjnego (ang. accumulation buffer). Wykorzystanie podwójnego buforowania (ang. double buffering). fragment - zbiór danych, na podstawie których oblicza się kolor piksela

Testowanie widoczności obiektów Bufor Z (ang. Z-buffer) Miejsce w pamięci osobne dla każdego piksela przeznaczone na zapamiętanie aktualnej wartości Z piksela. Wielkość bufora Z decyduje o precyzji testowania widoczności (obecnie stosuje się Z-bufory 32-bitowe). Wartość bufora uaktualniana jest dla każdego piksela i każdego trójkąta. Wartości z dla pikseli z wnętrza trójkąta są interpolowane na podstawie położenia wierzchołków trójkąta.

Potok graficzny Scena 3D wielokąty (położenie wierzchołków XYZ)) kolory (wektor RGB) wektory normalne (N) tekstury (współ. tektury (u,v)) Wykonywanie kolejnych operacji, dane wyjściowe z danej operacji są wejściem dla kolejnej. Potok akumuluje błędy. Zakres informacji nie powiększa się w kolejnych krokach potoku. bufor ramki (ang. frame buffer) transformacja modelu i widoku (współ. lokalne do współ. kamery) rzutowanie (macierz rzutowania) przejście do współ. rastrowych teksturowanie clipping cieniowanie pomijanie niewidocznych pikseli (bufor Z)

Literatura 1. Tomas Akenine-Moller, Eric Haines, Naty Hoffman, Real-Time Rendering (3rd edition), A K Peters, 2008.