OpenGL - Open Graphics Library Programowanie grafiki komputerowej Rados$aw Mantiuk Wydzia$ Informatyki Zachodniopomorski Uniwersytet Technologiczny! OpenGL: architektura systemu do programowania grafiki komputerowej (programowanie grafiki -> synteza obrazów)! Wspomaganie sprz!towe (system graficzny czasu rzeczywistego).! Bazuje na specyfikacji (nie implementacji).! Maszyna stanu (ang. rendering state machine).! Rozszerzalno"#.! Wieloplatformowo"#.! Wiele typów danych (np. sta$opozycyjne i zmiennoprzecinkowe).! Mo%liwo"# po$&czenia z ró%nymi j!zykami.! 1993: pierwsza wersja OpenGL 1.0 (== IRIX GL 5.0) w 1993 roku (IRIX GL 1.0 1983).! 2001: OpenGL1.4, vertex shader (programowalo"# operacji na wierzcho$kach).! 2003: OpenGL 1.5, fragment shader (oprogramowalno"# operacji na fragmentach).! Standard - OpenGL Khronos Group (ARB (Architecture Review Board), 3Dlabs, Apple, ATI, Dell Computer, IBM, Intel, NVIDIA, SGI, and Sun Microsystems).! Implementowana przez producentów kart graficznych.! Dost!pna na wi!kszo"ci platform sprz!towych i programowych (OpenGL ES).! Rozszerzalna (ang. OpenGL extensions). OpenGL 3.0! Shader model 4.0! geometry shader: per primitive programability! texture array! compact floating point textures (HDR)! FBO! depth-peeling (przezroczysto"#)! color space conversions (support for srgb) Przysz$o"# OpenGL: programowanie tessallacji (np. w LOD), CPU bed& generowa$y z$o%one instrukcje steruj&ce GPU (glcalllist), Eliminacja selektorów. Lepsze po$&czenie z shaderami (GLSL). OpenGL - Architektura (1) Aplikacja odwo!uje si" poprzez funkcje API OpenGL bezpo#rednio do karty graficznej (z pomini"ciem systemu operacyjnego). Implementacja software'owa - wszystkie funkcje mog& by# wykonywane przez CPU, jednak producenci kart mog& zast!powa# cz!"# funkcji OpenGL swoimi rozwi&zaniami sprz!towymi. Dla programisty ta zamiana jest niewidoczna. Aplikacja OpenGL Sterownik karty graficznej Karta graficzna - GPU Przetwarzanie grafiki 2D (danych rastrowych) i 3D (danych geometrycznych).
OpenGL - Architektura (2) OpenGL - Architektura (3) OpenGL - zestaw funkcji s$u%&cych do tworzenia dwu- i trójwymiarowych obiektów oraz kontrolowania w jaki sposób obiekty te s& renderowane do framebuffer a. Pisanie programu w OpenGL u: 1. utworzenie okna we framebuffer ze, 2. przechwycenie kontekstu okna, 3. renderowanie obiektów w oknie (np. rysowanie linii, wielok&tów, itp.). Architektura OpenGL bazuje na maszynie stanu kontroluj&cej dzia$anie zestawu funkcji graficznych. Wykorzystywana jest lista rozkazów (ang. display list) Biblioteka ma architektur! klient-serwer. Klient wysy$a polecenia do serwera. Klient nie musi znajdowa# si! na komputerze z serwerem. Publiczne API biblioteki zaimplementowane jest w C. Mo%liwe pomini!cie przetwarzania wierzcho$ków. Evaluator - zamiana obiektów z$o%onych na obiekty podstawowe. Fragment Operations - sk$adanie obiektów 2D wygenerowanych przez rasteryzer i umieszczanie ich we frambufferze. Biblioteka nie obs$uguje operacji wej"cia (np. myszy, klawiatury) i wyj"cia (np. monitora). Biblioteka rysuje obiekty podstawowe sk$adaj&ce si! z jednego lub wielu wierzcho$ków (wiecho$ek - ang. vertex). Ka%dy wierzcho$ek przetwarzany jest niezale%nie od innych. Jego parametrami s&: po$o%enie, kolor, wektor normalny, wspó$rz!dne tekstury. Do przetwarzania wierzcho$ków wykorzystywane s& funkcje graficzne (obliczenia macierzowe, równanie o"wietlenia, antyaliasing, itp.). OpenGL - Rasteryzacja fragment - zbiór danych wykorzystywanych do narysowania jednego piksela obrazu. Jego parametrami s& po$o%enie, dane o kolorze, wspó$. tekstury, wspó$. mg$y i Z-bufora dla poszczególnych punktów rastra, stan buforów Alpha, Stencil, itp. OpenGL: Bufory Bufor (miejsce w pami!ci) tworzony w CPU i przesy$ny do GPU. VBO (ang. Vertex Buffer Object) 1. utworzenie bufora z danymi o wierzcho$kach (po$o%enie, kolory, itp.) 2. utworzenie VBO (GL_ARRAY_BUFFER) (skopiowanie danych z CPU do GPU) 3. glbindbuffer() + gldrawarray() (mo%liwo"# podania offset'u)
OpenGL ES: Embedded Systems OpenGL ES: 1.x i 2.x Standard obejmuj&cy wybrane funkcje OpenGL, przeznaczone do implementacji w urz&dzeniach o ograniczonych zasobach (urz&dzeniach przeno"nych). Uproszczone wersje standardów (usunieto szereg funkcji). Mechanizmy!$czenia funkcji OpenGL ES z natywnym systemem operacyjnym. Wprowadzono dzia$anie na zmiennych sta!opozycyjnych (OpenGL ES 1.x). Programowalny potok graficzny (OpenGL ES 2.x). Coformance tests - testy zgodno"ci biblioteki ze standardem. 1.X - dwa profile zmiennych (fixed-point i mixed) 2.X - shader'y (OpenGL shading language), brak kompatybilnosci z 1.x OpenGL ES: Urz&dzenia http://www.glbenchmark.com OpenGL - GLUT (OpenGL Utility Toolkit) Biblioteka s$u%&ca do rysowania okien pod OpenGL em. Wieloplatformowo"#. Dost!pna jako open source. Funkcje: Wy"wietlanie okien, w których mo%e odbywa# si! renderowanie realizowane przez OpenGL (mo%e by# otwarte wiele takich okien), Obs$uga zdarze' wej"cia/wyj"cia za pomoc& callback ów. Obs$uga urz&dze' wej"ciowych (np. klawiatura, mysz). Obs$uga timer ów. Pop-up menu. Generowanie biblioteki obiektów z$o%onych. Wspomaganie wczytywania bitmap i fontów bitmapowych. Zarzadzanie oknami.
OpenGL - Graficzne interfejsy u%ytkownika GLUI OpenGL - GLUI Biblioteka s!u'$ca do budowy interfejsów u'ytkownika pracuj$cych pod OpenGL (wymagana biblioteka GLUT). Procesory GPU Programowalny procesor pracuj&cy niezale%nie od CPU. Programowalne procesory GPU shader - program wykonywany na GPU (ang. Graphics Processor Unit) W$asno"ci: bardzo szybkie przetwarzanie danych graficznych, szybkie operacje macierzowe - architektura SIMD (w organiczonym zakresie MIMD), zrównoleglenie oblicze% (wiele jednostek vertex i fragment shaderów), mog$ by& wykorzystane do innych oblicze% GPGPU (General Purpose GPU), szybszy rozwój ni' CPU (brak predykcji skoków).
Vertex shader Transformacje zwi$zane z wierzcho!ami: obliczenie po$o%enia, koloru, wektorów normalnych, wspó$rz!dnych tekstur. Zastosowania: efekty zwi&zane z deformacjami kamer (lens effects) - obiektywy fisheye, itp., zginanie i skr!canie obiektów, lokalny ruch obiektów (falowanie wody, ruch ubrania, itp.), teselacja (ang. tesselation) trójk&tów po$&czona z animacj&. Fragment shader - przyk$ady Fragment shader Transformacje zwi$zane z fragmentami: obliczanie koloru fragmentu, teksturowanie, obliczanie o"wietlenia (Phong shading), mg$a. Zastosowania: proceduralne teksturowanie, obliczanie tekstury z wykorzystaniem danych ze standardowych tekstur, mapowanie tekstur. Fragment shader - Phong shading (Cg)
Programowanie shaderów J!zyki programowania: GLSL - OpenGL Shading Language, CG (nvidia) HLSL (Microsoft) CUDA - Compute Unified Device Architecture Technologia programowania algorytmów GPGPU (General Purpose GPU). Dost!pna na GPU nvidia, seria 8 i nowsze (G8X GPU), luty 2007. Stream processing - SIMD, zrównoleglenie. Programowanie wysokopoziomowe (program C + rozszerzenia). CUDA - Compute Unified Device Architecture OpenVG - Vector Graphics Acceleration Standard i API s!u'$ce do rysowania dwuwymiarowej grafiki wektorowej i rastrowej. Rysowanie wspomagane sprz!towo. Stadard unifikujacy zestaw funkcji (niezalezny od urzadzenia). Rysowanie tekstów. Wspomaganie dla Adobe Flash. Anty-aliasing. Zmniejszenie zu%ycia baterii poprzez wykorzystanie wspomagania sprz!towego. Podzia$ zada' mi!dzy CPU i GPU niewodoczny dla u%ytkownika. Skalowalno"# ($atwo"# zmiany rozdzielczo"ci). Wspomaganie istniej&cych j!zyków (postscript, flash, itp.)
Literatura 1. Tomas Moller, Eric Haines, Real-Time Rendering, A K Peters, ISBN 1-56881-101-2 2. NVIDIA Whitepapers http://partners.nvidia.com/developer,.introduction to Vertex Shaders. Introduction to Pixel Shaders. 3. OpenGL Programming Guide (The Red Book), http://fly.srk.fer.hr/~unreal/theredbook/