Wprowadzenie Artur Staszczyk www.astaszczyk.com Bartłomiej Filipek www.bartlomiejfilipek.pl Bartlomiej.filipek@gmail.com
Podstawy grafiki 3D GPU Co to jest OpenGL Potok Graficzny Inicjalizacja Rendering
Dlaczego programowad grafikę? Czy dobry moment? Co można robid? Gry! GUI Wizualizacje Obliczenia
Wyspecjalizowane do obliczeo Często sprzętowe video Osobny proces asynchroniczny względem CPU! Klient/Server GPGPU
API do programowania kart graficznych Zestaw poleceo Standard przesyłania danych do karty Otwarta specyfikacja Implementowana przez twórców Zarządzana przez Khronos
v1.0 rok 1992, SGI Od 2.0 rok 2004 Shadery, GLSL v2.1 bufory ramek DX 9.0c Od 3.0 rok 2008 shadery geometrii DX10 nowy OpenGL wyrzucono fixed pipeline Od 4.0 rok 2010 Obecna wersja 4.2 Mniej więcej DirectX 11 Tesselacja
gluseprogram(program_id); glbindtexture(gl_texture_2d, id); glpushmatrix(); gltranslatef(0.0f, 0.0f, -24.0f); glbegin(gl_quads); glnormal3f( 0.0f, 0.0f, 1.0f); gltexcoord2f(0.0f, 0.0f); glvertex3f(-13.3f, -10.0f, 10.0f); gltexcoord2f(1.0f, 0.0f); glvertex3f( 13.3f, -10.0f, 10.0f); gltexcoord2f(1.0f, 1.0f); glvertex3f( 13.3f, 10.0f, 10.0f); gltexcoord2f(0.0f, 1.0f); glvertex3f(-13.3f, 10.0f, 10.0f); glend(); glpopmatrix();
Dane o wierzchołkach i atrybuty (Przestrzeo obiektu) Transformacje świata Transformacje kamery Projekcja Obcinanie (clipping) Rasteryzacja Operacje na fragmentach Testy głębi/szablonu/alpha, Blending Bufor ramki
Operacje na wektorach matrices_can_be_your_friends.html gl_transform.html
Nadawanie koloru Teksturowanie Oświetlenie Etc, etc, etc, etc Blending Testy Z Alpha Stencil Zapis do bufora ramki Antyaliasing
Dane o wierzchołkach i atrybuty Transformacje Oświetlenie Obcinanie (clipping) Generacja współrzędnych tekstur oraz ich transformacje T&L rasteryzacja
Teksturowanie, łączenie kilku tekstur Operacje na fragmentach jak testy głębi, alpha, blending, etc. Texturing Unit Zapisz do bufora ramki gdy fragment zaakceptowany Antyaliasing
glenable(gl_lighting); glactivetexture(gl_texture0); gltexenvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); gldisable(gl_texture_2d); glbindtexture(gl_texture_2d, texfloor); glactivetexture(gl_texture1); gltexenvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD ); gldisable(gl_texture_2d); if (g_renderreflection) { glenable(gl_texture_cube_map); glbindtexture(gl_texture_cube_map, reflectiontex); glenable(gl_texture_gen_s); glenable(gl_texture_gen_t); glenable(gl_texture_gen_r); gltexgeni(gl_s, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); gltexgeni(gl_t, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP); gltexgeni(gl_r, GL_TEXTURE_GEN_MODE, GL_REFLECTION_MAP);
Graficy i programiści czuli się ograniczeni przez statyczne i ustalone funkcje wewnętrzne OpenGL a. Aby stworzyd efekty trzeba było się nieźle natrudzid przy ustawianiu kolejnych parametrów stanów wewnętrznych OpenGL a. Tu coś wyłącz tu coś ustaw, etc, etc Brakowało elastyczności dlaczego nie mogę stworzyć czegoś nowego? Moc obliczeniowa kart graficznych jest tak duża, że fixed pipeline był dla nich wąskim gardłem.
Powstały dwie jednostki: vertex i fragment shadery. Verte shader ma na celu wykonad wszelkie operacje na wierzchołku transformacje, ustawianie kolorów, współrzędne tekstur, normalne Fragment shader zastępuje głównie teksturowanie, pokrywanie materiałem obiekty. Od teraz wszystko programujemy, a nie ustawiamy!
Vertex shader Dane o wierzchołkach i atrybuty Obcinanie (clipping) Transformacje Oświetlenie?? Generacja współrzędnych tekstur oraz ich transformacje Pomysły artystów rasteryzacja
Fragment Shader Teksturowanie, łączenie kilku tekstur mgła Pomysły artystów Operacje na fragmentach jak testy głębi, alpha, blending, etc. Zapisz do bufora ramki gdy fragment zaakceptowany Antyaliasing
System binding WGL Windows GLX Linux CGL Apple Windows Pixel format okna Opengl context wglmakecurrent
Od wersji 3.0 Core Tylko shadery, bufory Bez trybu natychmiastowego Bez modułu matematycznego do macierzy http://developer.nvidia.com/opengl-driver
https://www.opengl.org/registry/ www.lighthouse3d.com/tutorials/glut-tutorial/ opengl.org/sdk/docs/man3 www.opengl.org/documentation/specs openglbook.com - darmowa książka o nowoczesnym OpenGL www.arcsynthesis.org/gltut/ - darmowa książka o nowoczesnym OpenGL www.songho.ca/opengl/gl_vbo.html - tutorial o VBO
Artur Staszczyk www.astaszczyk.com Bartłomiej Filipek www.bartlomiejfilipek.pl Bartlomiej.filipek@gmail.com