Wizualizacja 3D. dr inż. Marcin Gabryel



Podobne dokumenty
Janusz Ganczarski. OpenGL Pierwszy program

Architektura Komputerów

Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa

Plan wykładu. Akcelerator 3D Potok graficzny

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

2 Przygotował: mgr inż. Maciej Lasota

Temat: Wprowadzenie do OpenGL i GLUT

Specyfikacja OpenGL Podstawy programowania grafiki komputerowej*

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5

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

Architektura systemów komputerowych Ćwiczenie 3

GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie

GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL

Karty graficzne możemy podzielić na:

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

Temat: Transformacje 3D

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

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

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

3 Przygotował: mgr inż. Maciej Lasota

Architektura Komputerów

Janusz Ganczarski. OpenGL Definiowanie sceny 3D

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

1 LEKCJA. Definicja grafiki. Główne działy grafiki komputerowej. Programy graficzne: Grafika rastrowa. Grafika wektorowa. Grafika trójwymiarowa

Karta graficzna karta rozszerzeo odpowiedzialna generowanie sygnału graficznego dla ekranu monitora. Podstawowym zadaniem karty graficznej jest

Grafika 3D program POV-Ray - 1 -

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

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

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

Teksturowanie (ang. texture mapping)

1. Czym jest rendering? a. Komputerowa analiza modelu danej sceny i utworzenie na jej podstawie obrazu 2D. b. Funkcja umożliwiająca kopiowanie obrazu

Wykład V. Karta graficzna. Studia stacjonarne Pedagogika Budowa i zasada działania komputera

Filtrowanie tekstur. Kinga Laurowska

Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )

Rzutowanie DOROTA SMORAWA

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

Grafika na stronie www

Architektura Komputerów

GRAFIKA. Rodzaje grafiki i odpowiadające im edytory

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

Grafika komputerowa. Dla DSI II

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

OpenGL i Qt. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska

Dowiedz się, jak tworzyć zapierające dech w piersiach gry 3D i efektowne, trójwymiarowe wizualizacje!

Oświetlenie obiektów 3D

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

Projektowanie aplikacji graficznych. dr inż. Jarosław Zubrzycki

OpenGL i wprowadzenie do programowania gier

GRK 4. dr Wojciech Palubicki

INFORMATYKA WSTĘP DO GRAFIKI RASTROWEJ

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza i obróbka obrazu

OpenGL Światło (cieniowanie)

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Grafika trójwymiarowa

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

Modele i przestrzenie koloru

Podłączanie bibliotek Zapis danych do pliku graficznego Generowanie promienia pierwotnego Import sceny z pliku Algorytm ray tracingu

1. Podstawowe algorytmy techniki rastrowe a) dwa przecinające się odcinki mogą nie mieć wspólnego piksela (T) b) odcinek o współrzędnych końcowych

6 Przygotował: mgr inż. Maciej Lasota

WSTĘP DO GRAFIKI KOMPUTEROWEJ

PRZEWODNIK PO PRZEDMIOCIE

Podstawy grafiki komputerowej

GRAFIKA KOMPUTEROWA. Rozwiązania sprzętowe i programowe. Przyspieszanie sprzętowe. Synteza dźwięku i obrazu

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

Przyspieszanie sprzętowe

OpenGL Światło (cieniowanie)

GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.

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

RENDERING W CZASIE RZECZYWISTYM. Michał Radziszewski

Przykładowe pytania na teście teoretycznym

Efekty dodatkowe w rasteryzacji

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

Julia 4D - raytracing

OpenGL teksturowanie

Rysowanie punktów na powierzchni graficznej

Architektura Komputerów

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

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

Grafika komputerowa Tekstury

dr inż. Piotr Odya dr inż. Piotr Suchomski

Transformacje. dr Radosław Matusik. radmat

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

Grafika 3D na przykładzie XNA 3.1

Modelowanie i wstęp do druku 3D Wykład 1. Robert Banasiak

1. Prymitywy graficzne

Laboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL.

KILKA SŁÓW O GRAFICE KOMPUTEROWEJ

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

Zaawansowana Grafika Komputerowa

Druga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.

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

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

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

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

Photoshop. Podstawy budowy obrazu komputerowego

Grafika komputerowa i wizualizacja

Grafika Komputerowa Wykład 1. Wstęp do grafiki komputerowej Obraz rastrowy i wektorowy. mgr inż. Michał Chwesiuk 1/22

rgbf<składowa_r,składowa_g,składowa_b,filter>. Dla parametru filter przyjmij kolejno wartości: 0.60, 0.70, 0.80, 0.90, 1.00, np.:

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

Opis efektów kształcenia dla modułu zajęć

Transkrypt:

Wizualizacja 3D dr inż. Marcin Gabryel

Modele braw CMYK (Cyan, Magenta, Yellow, black) RGB (Red, Green, Blue) HSV (Hue, Saturation, Value)

RGB Model polega na sumowaniu sygnałów w poszczególnych kanałach. Jasność zależy od sumy sygnałów składowych Stosowany powszechnie w monitorach i telewizorach

CMYK Model oparty o barwy dopełniające do podstawowych RGB C = W R M = W G Y = W B Barwy powstają poprzez odejmowanie kolorów od światła białego Model odpowiada zjawisku pochłaniania barw przez przedmioty. Światło odbite trafia do oczu i wywołuje wrażenie koloru Używany w drukarstwie Dodatkowy czarny kolor ma za zadanie usunięcie problemu koloru nałożonych na siebie wszystkich barw

HSV alternatywna reprezentacja przestrzeni RGB, która lepiej oddaje relacje właściwe ludzkiej percepcji barwy, zachowując prostotę obliczeniową H barwa (skala kątowa 0-360 o ) S nasycenie V jasność koloru V = max { R, G, B } B = ( R + G + B ) / 3 L = ( max { R, G, B } + min { R, G, B } ) / 2 Y = 0.3 R + 0.59 G + 0.11 B Y luminancja, określa percepcję jasności koloru przez ludzkie oko

Grafika wektorowa i rastrowa Dowolne położenie Zajętość pamięci zależna od skomplikwoania obrazu Możliwość skalowania Odbiór rysunku niezależny od urządzenia Określone położenie zależne od rastra Obraz zapamiętany w postaci mapy Zajętość pamięci niezależna od skomplikowania obrazu Odbiór rysunku zależny od urządzenia

Standardy plików graficznych Obrazy rastrowe BMP, GIF, PCX, TIFF, TGA, JPG (JPEG), PNG Obrazy wektorowe WMF, EPS, PS, DXF, SVG

Grafika 3D Obiekty 3D stanowią pewien fragment przestrzeni ograniczonej powierzchniami o różnym stopniu komplikacji. Chociaż każda taka powierzchnia da się jednoznacznie zdefiniowaną przy pomocy równań matematycznych, to ich przetwarzanie pochłonęło by całą dostępną moc obliczeniową. Zagadnienie 3D można w ogromnym stopniu uprościć rozkładając każdą z takich powierzchni na odpowiednio dużą (zależną od stopnia dokładności) liczbę wielokątów płaskich. Najprostszym z wielokątów jest oczywiście trójkąt i ten jest na ogół używany do aproksymacji. Każdy wierzchołków trójkąta jest jednoznacznie zawieszony w przestrzeni 3D przy pomocy trzech współrzędnych (x, y, z). Cały obiekt 3D przechowywany jest w spójnym fragmencie pamięci a operacje na nim (przemieszczenie, obrót, skalowanie itp.) sprowadzają się do rachunku macierzowego. Algorytm przesunięcia takiej bryły da się zapisad w kilku linijkach kodu maszynowego.

Tworzenie wizualizacji 3D Programy graficzne 3D Studio Max, Lightwave 3D, Blender, Maya, POV-Ray Programistyczne, z wykorzystaniem akceleratorów 3D DirectX OpenGL

DirectX Zestaw API wspomagający generowanie grafiki 2D i 3D, przestrzennego dźwięku, obsługi urządzeń zewnętrzych, multimedia, strumieniowa transmisja danych. Biblioteki DLL i sterowniki VXD Producenci dla swojego sprzętu piszą odpowiednie biblioteki Wersja na Windows i Xbox (integralny element systemów)

DirectX cd. Dużo dodatków - biblioteka D3DX (posiada funkcje matematyczne, wczytywanie tekstur, obsługę wielu plików graficznych, rysujące tekst itp.) Obsługa Shader za pomocą języka HLSL Do programowania niezbędny jest DirectX SDK (ok. 570MB), aktualizowany co 2 miesiące Dokumentacja na stronie MSDN http://msdn.microsoft.com/en-us/directx/default.aspx

Komponenty DirectX DirectDraw grafika 2D Direct3D grafika 3D DirectSound efekty dźwiękowe DirectMusic obsługa muzyki (obecnie XAudio 2) DirectInput urządzenia wejściowe DirectPlay funkcje sieciowe DirectShow, Direct Media Objects odtwarzanie plików audio i wideo DirectSetup instalacja komponentów DirectX

DirectX 9

DirectX 10

OpenGL OpenGL (Open Graphics Library) specyfikacja API do generowania grafiki. Umożliwia budowanie złożonych trójwymiarowych scen z podstawowych figur płaskich. 1990 IRIS GL API (Silicon Graphics) 1992 OpenGL 2004 OpenGL 2.0 2008 OpenGL 3.0 2010 OpenGL 4.1 Jest to interfejs niskopoziomowy Rozszerzenia w postaci bibliotek GLU (GL Utility library) GLUT (GL Utility Toolkit) WGL (dla Windows) i GLX (dla Linuxa) SDL (Simple DirectMedia Library) podobny jak DirectX

Raytracing Raytracing (śledzenie promieni) technika renderowania fotorealistycznych scen 3D Stosowany przez profesjonalistów (3D Studio, LightWave) Wolny Daje bardzo dobre rezultaty

Raytracing - przykład

Raytracing - przykład

Algorytm raytraceingu Dla każdego piksela na obrazie powtórz następującą procedurę: 1. utwórz promień od oka obserwatora do piksela i przedłuż go poza obraz 2. określ pierwszy obiekt O, który leży na drodze promienia i punkt P przecięcia promienia z powierzchnią obiektu 3. jeśli nie ma takiego obiektu, zwróć jako kolor - ustalony kolor tła, 4. w przeciwnym razie z punktu P wyprowadź promienie w kierunku wszystkich źródeł światła, by określić czy P jest w cieniu czy też nie; na tej podstawie i informacji o barwie obiektu O określ zwracany kolor 5. jeśli obiekt O ma lustrzaną powierzchnię, z punktu P wyprowadź promień odbity i powtórz rekursywnie niniejszą procedurę począwszy od pkt. 2; określ tym samym kolor widoczny w punkcie P w zwierciadle 6. jeśli O jest przezroczysty, wyprowadź z P promień ugięty i powtórz rekursywnie niniejszą procedurę począwszy od pkt. 2; określ tym samym kolor prześwitujący w punkcie P 7. z danych zebranych w pkt. 3-6 określ sumaryczny kolor jaki należy zwrócić

Popularne rozdzielczości ekranu QVGA 320x200 (4:3) VGA 640x480 (4:3) SVGA 800x600 (4:3) XGA 1024x768 (4:3) WXGA 1280x800 (16:10) WXGA+ 1440x900 (16:10) SXGA+ 1400x1050 (4:3) WSXGA+ 1680x1050 (16:10) UXGA 1600x1200 (4:3) WUXGA 1920x1200 (16:10) QXGA 2048x1536 (4:3) HDTV 720p 1280x720 (16:9) HDTV 1366x768 (16:9) HDTV 1080p 1920x1080 (16:9) PAL 720x576 NTSC 640x482

Karty graficzne - możliwości Filtrowanie anizotropowe Mapowanie wypukłości Efekty cząstkowe Full scene anti-aliasing HDR Pixel Shader Vertex Shader Transform & Lighting Inne (mgła, przeźroczystość)

Karty graficzne 1 miejsce wg ranking Chip.pl - 2010 Sapphire Radeon HD 5970 Toxic 4096MB GDDR5 Cena: 4500 PLN Chipset: Radeon HD 5970 Dwa rdzenie 256 bitowa szyna pamięci Taktowanie: 725Mhz i 4000Mhz (GPU i pamięć) Pobór mocy: od 40 do 294W

Karty graficzne ranking Chip.pl 1 miejsce - 2011 Gigabyte Radeon HD 6990 4096MB GDDR5 Cena: 2900 PLN Chipset: Radeon HD 6990 Pamięć: 2 x 2048 MB 2 rdzenie Szerokość interfejsu pamięci: 2 x 256 bity Taktowanie: rdzeń 250-880 Mhz, pamięć 5000 MHz Pobór mocy: 132-609 W

Od obiektu 3D do wizualizacji na ekranie monitora Obliczanie współrzędnych Przesunięcia Obroty Skalowanie Usuwanie fragmentów niewidocznych dla obserwatora Z-bufor Figury wypukłe B-tree Ray tracing Obliczanie barw obiektów cieniowanie Nakładanie tekstur Efekty dodatkowe (odblaski, mgła)

Współrzędne, trójkąty

Operacje na obiekcie 3D Obiekt 3D Skalowanie Przesunięcie Obrót

Punkt 3D, układ współrzędnych

Przekształcenia 3D - przesunięcie Przesunięcie o wektor

Przekształcenia 3D - przesunięcie

Przekształcenia 3D przesunięcie Przesunięcie o wektor

Przekształcenia 3D obrót wokół osi OX Obrót wokół osi OX o kąt

Przekształcenia 3D obrót wokół osi OY Obrót wokół osi OY o kąt

Przekształcenia 3D skalowanie

Bufor Z (bufor głębokości) Przechowywana jest współrzędna Z (odległość od obserwatora) Jeżeli współrzędna Z danego piksela jest mniejsza od współrzędnej Z zapisanej w buforze, można postawić pixel

Cieniowanie płaskie

Cieniowanie Gorauda

Cieniowanie Phonga

Cieniowanie Phonga

Teksturowanie Przedstawienie szczegółów obiektów przestrzennych za pomocą obrazów bitmapowych Mapowanie tekstury sposób na powiązanie pikseli tekstury (tekseli) z powierzchną obiektu Rodzaje mapowania Dla siatki wielokątów: UV mapping Dla figury przestrzennej Płaskie Sferyczne Cylindryczne Sześcienne

Teksturowanie, tekstura Nakładanie tekstury korekcja perspektywy

Sposoby teksturowania Przyporządkowanie najbliższego punktu Mipmapping Filtrowanie dwuliniowe (bilinearne) Filtrowanie trilinearne Filtrowanie anizotropowe

Mipmapping Technika teksturowania bitmapami Poprawia jakość teksturowania i przyspiesza ten proces Tekstury są różnej wielkości Im dalej, tym wykorzystane są mniejsze mipmapy, np. 256x256, 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1

Mipmapping - przykład

Filtrowanie dwuliniowe (biliniowe) Technika mająca za zadanie poprawę jakości wyświetlanych tekstur Polega na obliczaniu wartości (interpolacji) pomiędzy punktami na teksturze

Filtrowanie dwuliniowe przykład

Filtrowanie trójliniowe Technika poprawy jakości tekstur, która polega na zamazywaniu granic pomiędzy mipmapami Rozszerzenie dwuliniowego

Filtrowanie trójliniowe - przykład

Filtrowanie anizotropowe Technika poprawy jakości tekstur Stosowana dla obiektów będących pod dużym kątem Oprócz uwzględniania odległości od obserwatora, uwzględniany jest również kierunek do kamery W praktyce oznacza to stosowanie tekstur o różnych wymiarach. Jeżeli tekstura ma wymiary 128x128, to mipmapy mogą mieć wymiary 128x64 lub 64x128 w zależności od kąta patrzenia.

Filtrowanie anizotropowe - przykład

Filtrowanie anizotropowe - przykład

Porówanie technik nakładania tekstur

Multiteksturowanie Nakładanie kilku tekstur na jeden obiekt. Akceleratory posiadają wiele jednostek teksturujących, co przyspiesza tę czynność

Multiteksturowanie - przykład Dodawanie Odejmowanie, mnożenie, modulację itd

Mapowanie wypukłości (bump mapping) Technika symulująca niewielkie wypukłości powierzchni, bez integracji w geometrię obiektu trójwymiarowego Polega na nakładaniu tekstury która powoduje załamanie wektora normalnego Rezultatem zakłóceń jest pojawienie się złudzenia nierówności powierzchni Brzegi pozostają niezakłócone

Antyaliasing Techniki służące zmniejszeniu błędów, które powstają przy reprezentacji obrazu lub sygnału o wysokiej rozdzielczości w rozdzielczości mniejszej.

Antyaliasing - przykład

Vertex Shader Krótki program (podobny do assemblera), którym można modyfikować każdy wierzchołek. Dzięki temu można stosować efekty, które wcześniej wymagały stosowania wielu wielokątów

Pixel Shader Krótki program pisany dla poszczególnych pikseli ekranu, który pozwala na osiągniecie niesamowitych efektów w czasie rzeczywistym, m.in. oświetlenie Phonga, czy dokładne bump mapping.

Światła wolumetryczne Światło rzucane przez dziurę w ścianie lub rozgrzany przedmiot

Radiosity Metoda obliczania oświtlenia, uwzględniająca światło odbijanie się od ścian

Radiosity i ray tracing

Radiosity i ray tracing

Open GL System typu klient-serwer API (Application Programming Interface) do obsługi grafiki 3D Biblioteką procedur niskopoziomowych Maszyną stanu Nie śledzi promieni (raytracing) Biblioteki dodatkowe: GLU (GL Utility Library, GLUT (GL Utility Toolbox), GLAUX, GLX, WGL, SDL,

Typy proste GLboolean 1 Typ logiczny GLbyte 8 Liczba całkowita ze znakiem GLubyte 8 Liczba całkowita bez znaku GLchar 8 Znak tekstowy GLshort 16 Liczba całkowita ze znakiem GLushort 16 Liczba całkowita bez znaku GLint 32 Liczba całkowita ze znakiem GLuint 32 Liczba całkowita bez znaku GLsizei 32 Nieujemna liczba całkowita GLenum 32 Typ wyliczeniowy o wartościach całkowitych GLintptr * Wskaźnik na liczbę całkowitą ze znakiem GLsizeiptr * Wskaźnik na liczbę całkowitą nieujemną GLbitfield 32 Pole bitowe GLfloat 32 Liczba zmiennoprzecinkowa GLclammpf 32 Liczba zmiennoprzecinkowa z przedziału [0,1] GLdouble 64 Liczba zmiennoprzecinkowa GLclampd 64 Liczba zmiennoprzecinkowa z przedziału [0,1]

Polecenia OpenGL rtype Name{1 2 3 4}{b s i f d ub us ui}{v}([args,]t arg1,..., T argn [,args]) rtype zwracany typ Name nazwa funkcji, poprzedzona przedrostkiem gl lub glu (dla funkcji GLU) 1 2 3 4 liczba argumentów funkcji b typ GLbyte s typ GLshort i typ GLint f typ GLfloat d typ GLdouble ub typ GLubyte us typ GLushort ui typ GLuint v argumentem jest tablica wartości (w tym przypadku nie występuje określenie liczby parametrów) T arg1, T arg2 argumenty funkcji

Polecenia - przykład void glcolor3ub (GLubyte red, GLubyte green, GLubyte blue) void glcolor3ui (GLuint red, GLuint green, GLuint blue) void glcolor3ubv(const GLubyte *v) void glcolor3uiv(const GLuint *v) void glcolor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) void glcolor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha) void glcolor4ubv(const GLubyte *v) void glcolor4uiv(const GLuint *v)

Układ współrzędnych W OpenGL jest prawoskrętny układ współrzędnych z osią Z skierowaną prostopadle w stronę monitora

OpenGL - barwy W opengl występują barwy zapisane w modelu RGB. Dodatkowo podawany jest tzw. kanał Alfa (RGBA)

Błędy GLenum glgeterror(void) Kody błędów: GL_NO_ERROR brak błędu GL_INVALID_ENUM błędna wartośd typu wyliczeniowego GL_INVALID_VALUE błędna wartośd argumentu GL_INVALID_OPERATION operacja niemożliwa do wykonania GL_STACK_OVERFLOW przepełnienie stosu GL_STACK_UNDERFLOW niedomiar stosu GL_OUT_OF_MEMORY brak pamięci GL_TABLE_TOO_LARGE zbyt duża tablica

Bufor ramki (pamięci obrazu) W skład bufora ramki wchodzą: Bufor koloru Bufor głębokości Bufor szablonowy (bufor szablonu) Bufor akumulacyjny

Pierwszy program instrukcje tworzenia okna void glutinitdisplaymode(unsigned int mode) inizjalizacja bufora ramki Parametry: GLUT_DOUBLE dwa bufory koloru GLUT_RGB praca w trybie RGB void glutinitwindowsize(int width,int height) parametry width i height oznaczają odpowiednio szerokość i wysokość obszaru dostępnego do renderingu void glutinitwindowposition(int posx, int posy) Położenie okna void glutcreatewindow(char * name) Utworzenie okna

Funkcje obsługujące proces rysowania void glutdisplayfunc(void (*func)(void) ) Funkcja dołączająca funkcję do przerysowania okna void glutreshapefunc(void (*func)(int width, int height) ) Dołączenie funkcji wywoływanej przy zmianie rozmiaru okna

Rysowanie sceny 3D void glclearcolor(glclampf red, GLclampf green, GLclampf blue, GLclampf alpha) Kolor, którym wypełniony zostanie bufor koloru. Przyjmuje argumenty od [0;1]. (0,0,0,0) to kolor czarny, (1,1,1,0) to kolor biały. void glclear(glbitfield mask) Czyszczenie koloru tła, czyli czyszczenie obrazu. Jako parametr przekazujemy GL_COLOR_BUFFER_BIT oznaczający jaki element bufora ramki ma być wyczyszczony. void glcolor3f(glfloat red,glfloat green,glfloat blue) Funkcja do określenia koloru obiektu. Podaje się wartości koloru R G B w zakresie [0;1]

Definiowanie obiektu void glbegin(glenum mode) Rozpoczyna definiowanie obiektów. Podajemy jako argument rodzaj definiowanego obiektu (np. trójkąt to GL_TRIANGLES) void glvertex3f(glfloat x, GLfloat y, GLfloat z) Definicja pojedynczego wierzchołka obiektu (podajemy współrzędne x, y, z. Jeżeli rysujemy obiekt przy z=0, wówczas możemy zastosować funkcję void glvertex2f(glfloat x, GLfloat y) void glend(void) Definicję obiektu kończy to polecenie.

Wykonanie poleceń OpenGL void glflush(void) Wymuszenie wykonania wszystkich poleceń void glutswapbuffers(void) Zmiana buforów koloru (pokazanie narysowanego obrazu)

Pierwszy program- cpp #include <GL/gl.h> #include <GL/glu.h> #include <GL/glut.h> int main(int argc, char** argv) { glutinit(&argc, argv); glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA ); glutinitwindowsize(400, 400); glutinitwindowposition( 100, 100) ; glutcreatewindow("opengl"); glutdisplayfunc( drawscene ); glutreshapefunc( reshapescreen ); glutmainloop(); }

Pierwszy program cpp (2) void drawscene() { glclearcolor( 0.0, 0.0, 0.0, 0.0); glclear(gl_color_buffer_bit); glcolor3f( 1.0, 1.0, 1.0 ); glbegin( GL_TRIANGLES ); glvertex3f(-1, -1, -0.5); glvertex3f(-1, 1, -0.5); glvertex3f(1, 1, -0.5); glend(); glflush(); glutswapbuffers(); glutpostredisplay(); } void reshapescreen(int w, int h) { drawscene(); }

Obszar renderingu void glviewport(glint x, GLint y, GLsizei width, GLsizei height) W aplikacjach pracujących w systemach okienkowych problem zmiany rozmiaru okna jest tak powszechny, że wymaga specjalnego potraktowania. Jednym z możliwych sposobów jego rozwiązania jest dynamiczna modyfikacja obszaru renderingu. Służy to tego właśnie ta funkcja. x, y współrzędne lewego dolnego narożnika obszaru renderingu względem lewego dolnego narożnika okna height wysokość okna renderingu width szerokość okna renderingu

Zastosowanie glviewport void reshapescreen(int w, int h) { if ( w < h ) { glviewport(0, (h-w)/2, w, w); } else { glviewport((w-h)/2, 0, h, h); } } drawscene();

Rzutowanie prostokątne void glortho(gldouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far) Rozmiar bryły odcinania w rzutowaniu prostokątnym Parametry określają współrzędne punktów przecięcia płaszczyzn tworzących bryłę odcinania z osiami układu współrzędnych kartezjańskich

Rzutowanie prostokątne Domyślnie bryła ma postać sześcianu o bokach = 2 glortho(-1,1,-1,1,-1,1)

Macierze w OpenGL void glmatrixmode(glenum mode) OpenGL posaida kilka macierzy Parametr może przyjąć jedną z następujących wartości GL_MODELVIEW macierz modelowania, GL_PROJECTION macierz rzutowania, GL _TEXTURE macierz tekstury. void glloadidentity(void) Przpisanie macierzy jednostkowej

Obiekty w OpenGL

void glpointsize(glfloat size) void gllinewidth(glfloat width)