dr inż. Jacek Dąbrowski, KSG jacek.dabrowski@eti.pg.gda.pl
Technologie PHIGS, Iris GL OpenGL, DirectX, OpenGL OpenGL OpenGL ES WebGL OpenCL
OGL 1.0: 1992 DirectX:1995, GLIDE: 1996 OGL 1.1-1.5: 1997-2002 OGL 2.0: 2004 (GLSL) OGL 2.1: 2006 OGL 3.0: 2008 OGL 3.1, 3.2: 2009 OGL 3.3, OGL 4.0: 2010 (marzec) OGL 4.1: 2010 (lato) OGL 4.2: 2011 (lato) OGL 4.3: 2012 (lato)
OpenGL 1.3 OpenGL ES 1.0 OpenGL 1.5 OpenGL ES 1.1 OpenGL 2.0 OpenGL ES 2.0 OpenGL 4.3 OpenGL ES 3.0 OpenGL 4.1
Kompatybilność w dół (nie wszyscy się cieszą), Rozszerzenia OpenGL Architecture Review Board 3Dlabs, Apple, ATI, Dell, IBM, Intel, NVIDIA, SGI, Oracle, Khronos Group Richard Wright: OpenGL Superbible NeHe tutorial
Biblioteka w systemie, najczęściej razem ze sterownikiem karty graficznej, Software rendering Rozszerzenia: Nieoficjalne, np. GL_EXT_framebuffer_object Oficjalne, np. GL_ARB_vertex_array_object Architecture Review Board Możliwość odpytania karty graficznej o funkcjonalność
Definiowanie rzutu gluperspective( ) gluortho( ) Ustawianie kamery glulookat() Rysowanie kształtów Sfera, stożek, dysk, Przekształcenia tekstur Poziomy szczegółowości mipmapy Skalowanie
Start od pustego świata, Kamera w (0,0,0) Funkcje Definiujące i modyfikujące macierze przekształceń, Modyfikujące stan OpenGL, Rysujące, Dołączanie shaderów
Macierze przekształceń, Tryb teksturowania, Przeźroczystość, sposób mieszania, Światła, Test głębokości,... ok. 12 kb danych
Stos może przechowywać wybrane elementy stanu OpenGL, np. macierze przekształceń, atrybuty. Zanim zaczniemy pozycjonować obiekt lub konfigurować stan PUSH Po skończeniu POP
world transform przekształca wierzchołki z lokalnego układu współrzędnych do współrzędnych świata view transform wierzchołki ze współrzędnych świata przekształcane są do współrzędnych kamery projection transform wierzchołki ze współrzędnych kamery przekształcane tak aby wprowadzić iluzję głębi clipping and viewport scaling usuwa niewidoczne wierzchołki (clipping) i przeskalowuje ich współrzędne do współrzędnych ekranowych (viewport)
Czy? Scissor test Alpha test Stencil test Depth Test Kolor? Kolor Tekstury Światła Blending
http://www.khronos.org/opengles/2_x/
http://diaryofagraphicsprogrammer.blogspot.com/2009/12/direct3d-11-overview.html
Zarządzanie zasobami przez OpenGL: uchwyty unsigned integer: Tekstury Bufory VBO Programy (shadery)
Trójkąt - dwie strony W przypadku modelu, który będzie rysowany tylko od zewnątrz można rysować tylko połowę trójkątów, Przedniość ściany zależna od kolejności wierzchołków, Tryby rysowania ścian przednich/tylnych
2 x GL_TRIANGLE_FAN
W przypadku zamkniętych obiektów nie ma sensu rysowanie wewnętrznej ściany. Określanie przodu : flfrontface(gl_cw); flfrontface(gl_ccw);
glenable(gl_cull_face);
glpolygonmode(gl_back,gl_line);
Włączyć GL_STENCIL_TEST Wyzerować bufor Ustawić test tak, żeby punkty go nie przechodziły, ale zostawiały ślad w buforze glstencilfunc(...) glstencilop(...) Wyłączyć pisanie do bufora Narysować swoje
void glstencilfunc( GLenum func, GLint ref, GLuint mask ) func Specifies the test function. Eight tokens are valid: GL_NEVER, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, GL_EQUAL, GL_NOTEQUAL, and GL_ALWAYS. The initial value is GL_ALWAYS. Ref Specifies the reference value for the stencil test. ref is clamped to the range [0,2n-1], where n is the number of bitplanes in the stencil buffer. The initial value is 0. mask Specifies a mask that is ANDed with both the reference value and the stored stencil value when the test is done. The initial value is all 1's.
void glstencilop( GLenum fail, GLenum zfail, GLenum zpass ); Modyfikatory: GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT, GL_INCR_WRAP, GL_DECR_WRAP.
Włączanie/wyłączanie testu: glenable(gl_depth_test); Funkcja testująca: gldepthfunc(...): GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL,... Zapis przy rysowaniu: gldepthmask(gl_true); gldepthmask(gl_false);
glblendfunc(sourcefactor, destfactor) Kolor = source x sourcefactor + destination x destinationfactor Source piksel do postawienia Pixel piksel na ekranie Zwykła przeźroczystość : glblendfunc(gl_src_alpha, GL_ONE_MINUS_SRC_ALPHA)
Parameter (fr,fg,fb,fa) GL_ZERO (0,0,0,0) GL_ONE (1,1,1,1) GL_SRC_COLOR (Rs/kR,Gs/kG,Bs/kB,As/kA) GL_ONE_MINUS_SRC_COLOR (1,1,1,1) (Rs/kR,Gs/kG,Bs/kB,As/kA) GL_DST_COLOR (Rd/kR,Gd/kG,Bd/kB,Ad/kA) GL_ONE_MINUS_DST_COLOR (1,1,1,1) (Rd/kR,Gd/kG,Bd/kB,Ad/kA) GL_SRC_ALPHA (As/kA,As/kA,As/kA,As/kA) GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) (As/kA,As/kA,As/kA,As/kA) GL_DST_ALPHA (Ad/kA,Ad/kA,Ad/kA,Ad/kA) GL_ONE_MINUS_DST_ALPHA (1,1,1,1) (Ad/kA,Ad/kA,Ad/kA,Ad/kA) GL_SRC_ALPHA_SATURATE (i,i,i,1) GL_CONSTANT_COLOR (Rc,Gc,Bc,Ac) GL_ONE_MINUS_CONSTANT_COLOR (1,1,1,1) (Rc,Gc,Bc,Ac) GL_CONSTANT_ALPHA (Ac,Ac,Ac,Ac) GL_ONE_MINUS_CONSTANT_ALPHA (1,1,1,1) (Ac,Ac,Ac,Ac)
Kolory - glcolor Płaskie (FLAT) lub interpolacja Tekstury Jedno-, dwu-, trójwymiarowe Dla wierzchołka określane współrzędne Kolor (z glcolor) ma wpływ na wygląd tekstury, Światła Kolor i typ światła Materiał
Mapowanie tekstur Mip-mapy (level of detail) Filtrowanie Multiteksturowanie
Korekcja perspektywy http://en.wikipedia.org/wiki/file:perspective_correct_texture_mapping.jpg
GL_TEXTURE_MIN_FILTER Zmniejszanie - jeden piksel wiele tekseli GL_TEXTURE_MAG_FILTER Powiększanie - jeden piksel jeden lub mniej tekseli GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T GL_CLAMP lub GL_REPEAT
Multiteksturowanie Zazwyczaj graficy starają się uzyskać jedną teksturę na model, ale nie zawsze się udaje Detail texture, Light mapping, Dodatkowa, prekalkulowana tekstura z oświetleniem, Bump mapping, Tekstura jako źródło normalnych, Renderowanie do tekstury Cienie Pierwsze GPGPU
Rysowanie tekstu Gotowa tekstura, Kolejne quady... Kanał alpha Billboardy