Grafika komputerowa
Programowanie grafiki komputerowej
Rados$aw Mantiuk
Wydzia$ Informatyki
Zachodniopomorski Uniwersytet Technologiczny
Grafika komputerowa
OpenGL - Open Graphics Library
!
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).
Grafika komputerowa
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).
Grafika komputerowa
OpenGL - Architektura (1)
Przetwarzanie grafiki 2D (danych rastrowych) i 3D (danych geometrycznych).
Aplikacja
OpenGL
Sterownik karty graficznej
Karta graficzna - GPU
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.
Grafika komputerowa
OpenGL - Architektura (2)
• 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.
Grafika komputerowa
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.
•
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.).
Grafika komputerowa
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.
Grafika komputerowa
OpenGL: Bufory
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)
Bufor (miejsce w pami!ci) tworzony w CPU i przesy$ny do GPU.
Grafika komputerowa
OpenGL ES: Embedded Systems
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.
Grafika komputerowa
OpenGL ES: 1.x i 2.x
1.X - dwa profile zmiennych (fixed-point i mixed)
2.X - shader'y (OpenGL shading language), brak kompatybilnosci z 1.x
Grafika komputerowa
OpenGL ES: Urz&dzenia
http://www.glbenchmark.com
Grafika komputerowa
OpenGL - GLUT (OpenGL Utility Toolkit)
Biblioteka s$u%&ca do rysowania okien pod OpenGL’em.
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.
• Wieloplatformowo"#.
• Dost!pna jako open source.
Grafika komputerowa
OpenGL - Graficzne interfejsy u%ytkownika GLUI
Biblioteka s!u'$ca do budowy interfejsów u'ytkownika pracuj$cych pod OpenGL (wymagana biblioteka
GLUT).
Grafika komputerowa
OpenGL - GLUI
Grafika komputerowa
Procesory GPU
Programowalny procesor pracuj&cy niezale%nie od CPU.
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).
Grafika komputerowa
Programowalne procesory GPU
shader
- program wykonywany na GPU (ang. Graphics Processor Unit)
Grafika komputerowa
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 fish-
eye, 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&.
Grafika komputerowa
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.
Grafika komputerowa
Fragment shader - przyk$ady
Grafika komputerowa
Fragment shader - Phong shading (Cg)
Grafika komputerowa
Programowanie shaderów
J!zyki programowania:
• GLSL - OpenGL Shading Language,
• CG (nVidia)
• HLSL (Microsoft)
Grafika komputerowa
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).
Grafika komputerowa
CUDA - Compute Unified Device Architecture
Grafika komputerowa
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.)
Grafika komputerowa
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/