OpenGL http://www.opengl.org/documentation/red_book/ http://www.gamedev.net/download/redbook.pdf Biblioteka procedur graficnch środowiko Klient Serwer aplikacja = klient erwer moŝe bć na innm komputere tpow erwer = tem operacjn tpu window grafika podtawowego poiomu elementarne obiekt (prmitw = primitive) GLU = OpenGL Utilit Librar aawanowane procedur graficne GLX = OpenGL Etenion to the X Window Stem [tm] komunikacja temem X Window GLUT = OpenGL Utilit Toolkit komunikacja dowolnm temem tpu window OpenGLUT now projekt opart m.in. na GLUT 37 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
GLUT Graphic Librar Utilit Toolkit Biblioteka funkcji do komunikacji temem window +... Stem okien (window) jet terowan dareniami (event) #include <GL/openglut.h>... int main(int argc, char *argv[]) { glutinit(&argc, argv); glutinitwindowsie(windw, windh); glutinitwindowpoition(,); //glutinitdiplamode(glut_rgb GLUT_SINGLE); wbiera argv opcje GLUTa w pikelach Na ielono opcjonalne glutcreatewindow("title"); tu OpenGL tandard } //m_init(); glutdiplafunc(proc_paint); glutkeboardfunc(proc_ke); glutmouefunc(proc_moue); glutmainloop(); return EXIT_SUCCESS; funkcje obługi dareń event handler pętla obługi dareń event loop 38 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Model operacjn OpenGL Lita poleceń Dipla Lit polecenia Command Oblicenia Evaluator Operacje na wierchołkach i kontrukcja prmitwów Per-verte Operation and Primitive Aembl Pamięć tektur Teture Memor Ratrowanie Rateriation Pamięć ratra Frame buffer Operacje na pikelach Piel Operation 39 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Elementarne obiekt graficne prmitw Figur geometrcne ą tworone wierchołków: glbegin(glenum mode ); glverte...(,,...); glverte...(,,...);... glevalcoord...(t,...); glend(); mode GL_POINTS, GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP, GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUADS, GL_QUAD_STRIP, GL_POLYGON 4 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Prkład void Paint(void) { glclearcolor(,,,); glclear(gl_color_buffer_bit); glcolor3d(,,.5); gllinewidth(); glbegin(gl_line_loop); glverte2d(, ); glverte2d(.4, ); glverte2d(-.,.7); glend(); glfluh(); } 4 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Prkład 2 void Paint(void) { glclearcolor(,,,); glclear(gl_color_buffer_bit); glbegin(gl_triangles); glcolor3d(,,); glverte2d(, ); glcolor3d(,,); glverte2d(.4, ); glcolor3d(,,); glverte2d(-.,.7); glend(); glfluh(); } glshademodel(gl_smooth); Model cieniowania Shading model glshademodel(gl_flat); 42 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Układ wpółrędnch Układ wpółrędnch wiąan oberwatorem w punkcie (,,). ee coordinate M Aktualn układ wpółrędnch, w którm podajem wpółrędne wierchołków Pocątkowo M = I 43 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
W. Słomińki, "Wtęp do grafiki komputerowej" - 26 44 Od wp. uŝtkownika do wp. urądenia M P [ ] 3, / / / w w w w w Wpółrędne obiektów, jak w glverte4d(,,,w ); glverte3d(,, ); w = glverte2d(, ); =, w = V
Rut protopadł = -n = -f (l, b, -n) (r, t, -n) f > n void glortho( GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f ); gluortho2d(l, r, b, t ) = glortho(l, r, b, t, -, ); Domślnie: gluortho2d(-,,-,); 45 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Perpektwa = -n = -f (l, b, -n) (r, t, -n) f > n > void glfrutum( GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f ); (r-l )/(t-b) tutaj: l = -r, b = -t void gluperpective( GLdouble ang, GLdouble apect, GLdouble n, GLdouble f ); 46 [, 8] W. Słomińki, "Wtęp do grafiki komputerowej" - 26
W. Słomińki, "Wtęp do grafiki komputerowej" - 26 47 Maciere projekcji glfrutum(l, r, b, t, n, f ); + + + = 2 2 2 n f fn n f n f b t b t b t n l r l r l r n P glortho(l, r, b, t, n, f ); + + + = 2 2 2 n f n f n f b t b t b t l r l r l r P
Viewport (W, H) Okno utworone pre tem window (, ) (, ) (+ width, + height) V glviewport( GLint, GLint, GLiei width, GLiei height ); - - Domślnie: glviewport(,,w,h); Wpółrędne normaliowane 48 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Zmiana połoŝenia oberwatora M O r + U r O r C r void glulookat( GLdouble e, GLdouble e, GLdouble e, GLdouble c, GLdouble c, GLdouble c, GLdouble U, GLdouble U, GLdouble U ) ; O r C r U r Obrót i Tranlacja M Kierunek nowej oi Y 49 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
W. Słomińki, "Wtęp do grafiki komputerowej" - 26 5 Viewport Clipping Tlko ą rowane. Perpective diviion Modelview & Projection Podumowanie tranformacji = w PM w = / / / ˆ ˆ ˆ w w w w [ ] 3, ˆ ˆ ˆ h w 2 ˆ 2 ˆ + + = + + = = ˆ ˆ V
Krwa Béier topnia N r N N N = k k k k N k ( t) = B ( P, K, P ; t) = t ( t) P, t [,] N. Definicja odworowania: glmapf(gl_map_vertex_3,.,., Pdit, N+, P); glenable(gl_map_vertex_3); Punkt kontrolne: float P[] = {,,,...,,,...}; 2. Rowanie krwej int N_SEGS = 64; glbegin(gl_line_strip); for(i = ; i <= N_SEGS; i++ ) glevalcoordf((glfloat)i/n_segs); glend(); Pdit = & - & = ilość floatów na jeden punkt 5 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Prkład 3 52 tatic void render(void) { int i, NSEGS=64; glclearcolor(,,,); glclear(gl_color_buffer_bit GL_DEPTH_BUFFER_BIT); glmapf( GL_MAP_VERTEX_3,.,., 3, 4, P); glenable( GL_MAP_VERTEX_3 ); gllinewidth(2); glcolor3d(,,); glbegin(gl_line_strip); for(i=; i<=nsegs; i++) glevalcoordf((glfloat)i/nsegs); glend(); glpointsie(6); glcolor3d(,,); glbegin(gl_points); for(i = ; i < 4; i++) glverte3fv(p); glend(); gllinewidth(); glcolor3d(,,); glbegin( GL_LINES ); for(i = ; i < 4; i++) glverte3fv(p); glend(); glutswapbuffer(); } W. Słomińki, "Wtęp do grafiki komputerowej" - 26
NURBS topnia N. Definicja odworowania: GLUnurbObj* nobj = glunewnurbrenderer(); glunurbpropert(nobj, GLU_SAMPLING_TOLERANCE, 5.); Punkt kontrolne: GLfloat P[] = {,,,...,,,...}; Węł: GLfloat knot[] = {,..., }; Nknot = NPt + N + 53 2. Rowanie krwej glubegincurve(nobj); glunurbcurve(nobj, Nknot, knot, Pdit, P, NPt, GL_MAP_VERTEX_3); gluendcurve(nobj); 3. Zwalnianie pamięci gludeletenurbrenderer(nobj); Pdit = & - & = ilość floatów na jeden punkt W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Prkład 4 tatic void render(void) { int i;... GLUnurbObj* nobj = glunewnurbrenderer(); glunurbpropert(nobj, GLU_SAMPLING_TOLERANCE, 5.); GLfloat knot[8] = {,,,,,,,}; gllinewidth(4); glcolor3d(,,); glubegincurve(nobj); glunurbcurve(nobj, NctrlPoint+Degree+, knot+degree-, 3, P, NctrlPoint, GL_MAP_VERTEX_3); gluendcurve(nobj); gludeletenurbrenderer(nobj);... glfluh(); } 54 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Tektur (Teture) Tektura to prepi mówiąc, jak wpełniać kolorem wbrane obar. Prkład: Zaada : wpełnij obar kolorem od (,,) do (,,) 5 55 - W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Tektura -wmiarowa Odworowanie: [,] { r( ), g( ), b( ), α( ),...} f() Prkład (c.d.) r = g = b = f, α = Obraek tektur Mapowanie tektur (teture mapping).9 5 56.2 - W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Mapowanie tektur (teture mapping) Prpianie kaŝdemu punktowi obaru konkretnej wartości wpółrędnej tektur,. Wierchołek k : wpółrędne pretrenne ( k, k ), wpółrędne tektur ( k ) = = 2 =.9 pośrednie wartości : interpolacja liniowa pośrednie wartości : interpolacja liniowa Podtawowa metoda to interpolacja liniowa. Tak jet w OpenGL. =.2 =.9 57 = cont. W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Mapowanie tektur (2) To jet krwa Beier. Pośrednie wartości = parametrowi krwej Fragment kodu OpenGL: int i, NSeg=64; float ; glbegin(gl_line_strip); for(i = ; i <= NSeg; i++) { = (GLfloat)i/NSeg; gltecoordf(); glevalcoordf(); } glend(); Utala wartość, jaka będie prpiana kaŝdemu nowemu wierchołkowi Twor now wierchołek o wpółrędnch odp. wartości parametru =. 58 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Mapowanie tektur (3) Wartości poa prediałem [, ]. Pred wliceniem wartości tektur ą amieniane na [, } 2 = 5 2 = 5 = - = 5 = - = = = = < > [, ] = 5 [,) wrap = GL_CLAMP wrap = GL_REPEAT glteparameterf(gl_texture_d, GL_TEXTURE_WRAP_S, wrap); 59 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Obraek tektur (teture image) f() r = g = b = f, α = Obraek tektur pikel W kaŝdm piklu RGBA np. 64 pikle To definiuje wór tektur, tak jak obraek piklow opiuje obra analogow Stąd inna definicja: Tektur, to obraki piklowe, którch pobieram informację, jak wpełniać kolorem wbrane obar. 6 W. Słomińki, "Wtęp do grafiki komputerowej" - 26
Tektur 2- i więcej wmiarowe t glteimaged(...) glteimage2d(...) W werji OpenGL.* tektur - i 2-wmiarowe. W werji 2. takŝe 3-wmiarowe (, t, r) W ogólnm prpadku wierchołek k : wpółrędne pretrenne ( k, k, k, w k ), wpółrędne tektur ( k, t k, r k, q k ) 6 W. Słomińki, "Wtęp do grafiki komputerowej" - 26