Bufor koloru cd. Czyszczenie bufora koloru glclearcolor( )
|
|
- Monika Kruk
- 8 lat temu
- Przeglądów:
Transkrypt
1 Wizualizacje 3D
2 Bufor koloru Bufor koloru służy do przechowywania obrazu renderowanej sceny 3D. Typowo OpenGL stosuje dwa bufory koloru: przedni i tylny. Bieżąca scena znajduje się w przednim buforze i jest wyświetlana na ekranie monitora, a jednocześnie w tylnym buforze rysowana jest kolejna ramka sceny. Po zakończeniu rysowania, bufory są zamieniane i cały proces zaczyna się od początku.
3 Bufor koloru cd. Wybór działania bufora wybiera się na początku działania programu funkcją glutinitdisplaymode( arg ) przyjmuje jako argument maskę bitową GLUT_SINGLE pojedynczy bufor koloru, GLUT_DOUBLE podwójny bufor koloru GLUT_STEREO tryb stereoskopowy Czyszczenie bufora koloru glclearcolor( )
4 Kolor Kolor w OpenGL może być określany za pomocą 3 lub 4 wartości 3 wartości to kolory R G B (czerwony, zielony, niebieski) 4 wartością to składowa alfa Kolory podawane są w wartościach 0-1
5 Funkcje ustawiające kolor trzyargumentowe void glcolor3b (GLbyte red, GLbyte green, GLbyte blue) void glcolor3d (GLdouble red, GLdouble green, GLdouble blue) void glcolor3f (GLfloat red, GLfloat green, GLfloat blue) void glcolor3i (GLint red, GLint green, GLint blue) void glcolor3s (GLshort red, GLshort green, GLshort blue) void glcolor3ub (GLubyte red, GLubyte green, GLubyte blue) void glcolor3ui (GLuint red, GLuint green, GLuint blue) void glcolor3us (GLushort red, GLushort green, GLushort blue) void glcolor3bv(const GLbyte *v) void glcolor3dv(const GLdouble *v) void glcolor3fv(const GLfloat *v) void glcolor3iv(const GLint *v) void glcolor3sv(const GLshort *v) void glcolor3ubv(const GLubyte *v) void glcolor3uiv(const GLuint *v) void glcolor3usv(const GLushort *v)
6 Funkcje ustawiające kolor czteroargumentowe void glcolor4b (GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha) void glcolor4d (GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha) void glcolor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) void glcolor4i (GLint red, GLint green, GLint blue, GLint alpha) void glcolor4s (GLshort red, GLshort green, GLshort blue, GLshort alpha) void glcolor4ub (GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha) void glcolor4ui (GLuint red, GLuint green, GLuint blue, GLuint alpha) void glcolor4us (GLushort red, GLushort green, GLushort blue, GLushort alpha) void glcolor4bv(const GLbyte *v) void glcolor4dv(const GLdouble *v) void glcolor4fv(const GLfloat *v) void glcolor4iv(const GLint *v) void glcolor4sv(const GLshort *v) void glcolor4ubv(const GLubyte *v) void glcolor4uiv(const GLuint *v) void glcolor4usv(const GLushort *v)
7 Kolory tryb indeksowy W trybie indeksowym kolor określany jest pojedyncza liczba indeksem do mapy (tablicy) kolorów, która zawiera informacje o składowych RGB. Typowo wielkość mapy kolorów wynosi od 256 (2 8 ) do (2 12 ). Biblioteka OpenGL nie posiada żadnych mechanizmów pozwalających na zmianę zawartości mapy kolorów void glindexd (GLdouble c) void glindexf (GLfloat c) void glindexi (GLint c) void glindexs (GLshort c) void glindexdv (const GLdouble *c) void glindexfv (const GLfloat *c) void glindexiv (const GLint *c) void glindexsv (const GLshort *c)
8 Cieniowanie Cieniowaniem nazywamy metodę ustalania koloru poszczególnych pikseli wielokąta. Dwa modele cieniowania: cieniowanie płaskie oraz cieniowanie gładkie. W cieniowaniu płaskim wielokąt otrzymuje jeden kolor - określony dla ostatniego wierzchołka (wyjątek stanowi prymityw GL_POLYGON, o kolorze którego decyduje kolor określony dla pierwszego wierzchołka). Cieniowanie gładkie wykorzystuje algorytm Gourauda Wybór cieniowania: void glshademodel (GLenum mode) GL_FLAT - cieniowanie płaskie, GL_SMOOTH - cieniowanie gładkie.
9 Dithering Kiedy w systemie dostępna jest niewielka liczba kolorów, OpenGL może symulować kolory za pomocą ditheringu. Algorytm polega na umieszczaniu kolorowych pikseli tak aby sprawiały wrażenie jednolitej barwy Włączenie: glenable(gl_dither); Wyłączenie: gldisable(gl_dither);
10 Przykład #include <GL/glut.h> GLenum shading_model = GL_SMOOTH; bool dithering = true; GLfloat red = 1.0, green = 1.0, blue = 1.0; int main (int argc, char *argv[]) glutinit (&argc,argv); glutinitdisplaymode (GLUT_DOUBLE GLUT_RGB); glutinitwindowsize (500,500); glutcreatewindow ("Trojkat"); glutdisplayfunc (Display); glutreshapefunc (Reshape); glutkeyboardfunc (Keyboard); glutmainloop (); return 0;
11 Przykład cd. void Reshape (int width, int height) glviewport (0,0,width,height); glmatrixmode (GL_PROJECTION); glloadidentity (); gluortho2d (0,1,0,1); Display (); void Keyboard (unsigned char key, int x, int y) if (key == 'R' && red < 1.0) red += 0.05; if (key == 'r' && red > 0.0) red -= 0.05; if (key == 'B' && blue < 1.0) blue += 0.05; if (key == 'b' && blue > 0.0) blue -= 0.05; if (key=='f') shading_model = GL_FLAT; if (key=='s') shading_model = GL_SMOOTH; if (key=='d') dithering =!dithering; Display (); if (key == 'G' && green < 1.0) green += 0.05; if (key == 'g' && green > 0.0) green -= 0.05;
12 void Display () glclearcolor (1.0,1.0,1.0,1.0); glclear (GL_COLOR_BUFFER_BIT); glmatrixmode (GL_MODELVIEW); glloadidentity (); if (dithering == true) glenable (GL_DITHER); glshademodel (shading_model); glbegin (GL_TRIANGLES); glcolor3f (red,0.0,0.0); glvertex2f (0.1,0.1); glcolor3f (0.0,green,0.0); glvertex2f (0.9,0.3); glcolor3f (0.0,0.0,blue); glvertex2f (0.3,0.9); glend (); gldisable (GL_DITHER); glflush (); glutswapbuffers ();
13 Mapy bitowe OpenGL posiada także wsparcie do klasycznej grafiki rastrowej. Mapy bitowe to prostokątne tablice liczb. Dane tablicy zawierającej mapą bitową przyjmują tylko dwie wartości: 0 lub 1 Rysowane są jedynie piksele o wartości 1. Piksele o wartości 0 są pomijane i nie wpływają na zawartość bufora kolorów. Kolor określany jest funkcją glcolor
14 Ustalenie położenia mapy bitowej Pozycja rastra (mapy bitowej) określają funkcje grupy glrasterpos : void glrasterpos2d( GLdouble x, GLdouble y ) void glrasterpos2f( GLfloat x, GLfloat y ) void glrasterpos2i( GLint x, GLint y ) void glrasterpos2s( GLshort x, GLshort y ) void glrasterpos2dv( const GLdouble * v ) void glrasterpos2fv( const GLfloat * v ) void glrasterpos2iv( const GLint * v ) void glrasterpos2sv( const GLshort * v ) Wersje 3d void glrasterpos3d( GLdouble x, GLdouble y, GLdouble z ) void glrasterpos3f( GLfloat x, GLfloat y, GLfloat z ) void glrasterpos3i( GLint x, GLint y, GLint z ) void glrasterpos3s( GLshort x, GLshort y, GLshort z ) void glrasterpos3dv( const GLdouble * v ) void glrasterpos3fv( const GLfloat * v ) void glrasterpos3iv( const GLint * v ) void glrasterpos3sv( const GLshort * v )
15 Rysowanie mapy bitowej Rysowanie mapy bitowej w określonej pozycji wykonuje funckja: void glbitmap( GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap ) Gdzie: width - szerokość mapy bitowej w pikselach, height - wysokość mapy bitowej w pikselach, xorig, yorig - współrzędne początku układu współrzędnych mapy bitowej liczone względem jej lewego dolnego wierzchołka, xmove, ymove - współrzędne wektora przesunięcia pozycji rastra wykonywanego po narysowaniu mapy bitowej, bitmap - wskaźnik do danych bitmapy.
16 Parametry mapy bitowej Mapa bitowa jest zapisana odwrotnie (od dolnego do górnego wiersza). Funkcja do ustalenia parametrów zapisu (PACK) lub odczytu (UNPACK) mapy bitowej void glpixelstoref( GLenum pname, GLfloat param ) void glpixelstorei( GLenum pname, GLint param ) pname nazwa parametru, który ma zostać zmodyfikowany, param wartość nowego parametru
17 Parametry mapy bitowej
18 Parametry zapisu mapy bitowej GL_PACK_SWAP_BYTES kolejność zapisanych bajtów GL_FALSE normalny odczyt bajtów b0b1b2b3 GL_TRUE odwrócenie bajtów b3b2b1b0 GL_PACK_LSB_FIRST kolejność zapisu bitów w bajcie danych GL_TRUE - bity uporządkowane są od najmniej do najbardziej znaczącego GL_FALSE bity od najbardziej znaczącego do najmniej znaczącego GL_PACK_ROW_LENGTH - określenie szerokości zapisywanej mapy bitowej, gdy jest ona węższa niż cała mapa bitowa (rys) 0 mapa bitowa ma wartość width z funkcji glbitmap GL_PACK_SKIP_PIXELS określenie liczbę początkowych pikseli w wierszu pomijanych podczas zapisu mapy bitowej (rys) GL_PACK_SKIP_ROWS określa liczbę (dolnych) wierszy pomijanych podczas zapisu mapy bitowej (rys) GL_PACK_ALIGNMENT - wielokrotność (w bajtach) długości pojedynczego wiersza danych zapisywanych do pamięci; domyślnie 4 bajty, pozostałe dopuszczalne wartości to1, 2 i 8
19 Parametry odczytu mapy bitowej GL_UNPACK_SWAP_BYTES kolejność odczytu bajtów GL_FALSE normalny odczyt bajtów b0b1b2b3 GL_TRUE odwrócenie bajtów b3b2b1b0 GL_UNPACK_LSB_FIRST kolejność odczytu bitów w bajcie danych GL_TRUE - bity uporządkowane są od najmniej do najbardziej znaczącego GL_FALSE bity od najbardziej znaczącego do najmniej znaczącego GL_UNPACK_ROW_LENGTH - określenie szerokości odczytywanej mapy bitowej, gdy jest ona węższa niż cała mapa bitowa (rys) 0 mapa bitowa ma wartość width z funkcji glbitmap GL_UNPACK_SKIP_PIXELS określenie liczbę początkowych pikseli w wierszu pomijanych podczas odczytu mapy bitowej (rys) GL_UNPACK_SKIP_ROWS określa liczbę (dolnych) wierszy pomijanych podczas odczytu mapy bitowej (rys) GL_UNPACK_ALIGNMENT - wielokrotność (w bajtach) długości pojedynczego wiersza danych odczytywanych z pamięci; domyślnie 4 bajty, pozostałe dopuszczalne wartości to1, 2 i 8
20 Przykład #include <vector> #include <GL/glut.h> // współrzędne pozycji rastra map bitowych std::vector < GLint > raster_x; std::vector < GLint > raster_y; // mapa bitowa - litera F GLubyte letterf[ ] = 0xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xFC, 0x00, // xFC, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xC0, 0x00, // xFF, 0xFF, // xFF, 0xFF // ; int main( int argc, char * argv[] ) glutinit( & argc, argv ); glutinitdisplaymode( GLUT_DOUBLE GLUT_RGB ); glutinitwindowsize( 500, 500 ); glutcreatewindow( "Mapy bitowe" ); glutdisplayfunc( Display ); glutreshapefunc( Reshape ); glutmousefunc( MouseButton ); glutmainloop(); return 0;
21 void Display() glclearcolor( 1.0, 1.0, 1.0, 1.0 ); glclear( GL_COLOR_BUFFER_BIT ); glmatrixmode( GL_MODELVIEW ); glloadidentity(); glcolor3f( 0.0, 1.0, 0.0 ); glrectf( 100, 100, glutget( GLUT_WINDOW_WIDTH ) - 100, glutget( GLUT_WINDOW_HEIGHT ) ); void Reshape( int width, int height ) glviewport( 0, 0, width, height ); glmatrixmode( GL_PROJECTION ); glloadidentity(); gluortho2d( 0, width, 0, height ); Display(); glcolor3f( 1.0, 0.0, 0.0 ); glpixelstorei( GL_UNPACK_ALIGNMENT, 2 ); for( unsigned int i = 0; i < raster_x.size(); i++ ) glrasterpos2i( raster_x[ i ], raster_y[ i ] ); glbitmap( 8, 16, 0, 0, 0, 0, letterf ); glflush(); glutswapbuffers(); void MouseButton( int button, int state, int x, int y ) if( button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ) raster_x.insert( raster_x.end(), x ); raster_y.insert( raster_y.end(), glutget( GLUT_WINDOW_HEIGHT ) - y ); Display();
22 Wersja OpenGL Funkcje do sprawdzenia wersji OpenGL const GLubyte *glgetstring (GLenum name) GL_VENDOR - autor implementacji OpenGL, GL_RENDERER - nazwa urządzenia renderującego, np. karty graficznej, GL_VERSION - numer wersji implementacji OpenGL w formacie: wersja.podwersja lub wersja.podwersja.wydanie oraz opcjonalnie po pojedynczej spacji producent biblioteki, GL_EXTENSIONS - wykaz obsługiwanych rozszerzeń OpenGL. Nazwy obsługiwanych rozszerzeń biblioteki OpenGL oddzielone są pojedyncza spacja.
23 Wersja biblioteki GLU const GLubyte *glugetstring (GLenum name) Parametr name przyjmuje jedna z dwóch wartości: GLU_VERSION i GLU_EXTENSIONS
24 Wyświetlenie tekstu w OpenGL Wyświetlanie ciągów znaków umożliwia funkcja void glutbitmapcharacter (void *font, int character) parametr font określa rodzaj wyświetlanej czcionki bitmapowej, a character znak jaki ma zostać wyświetlony Czcionki bitmapowe są na stałe zapisane w bibliotece. GLUT jako mapy bitowe. Są one kodowane w ISO , czyli bez polskich liter.
25 Czcionki bitmapowe GLUT_BITMAP_8_BY_13 - typowa czcionka o wymiarach znaków 8 13 pikseli; znaki ASCII z przedziału [0, 255]; GLUT_BITMAP_9_BY_15 - typowa czcionka o wymiarach znaków 9 15 pikseli; GLUT_BITMAP_TIMES_ROMAN_10-10-punktowa czcionka proporcjonalna Times Roman; znaki ASCII z przedziałów: [32, 126] i [160, 255]; GLUT_BITMAP_TIMES_ROMAN_24-24-punktowa czcionka proporcjonalna Times Roman; znaki ASCII z przedziałów: [32, 126] i [160, 255]; GLUT_BITMAP_HELVETICA_10-10-punktowa czcionka proporcjonalna Helvetica; znaki ASCII z przedziałów: [32, 126] i [160, 255]; GLUT_BITMAP_HELVETICA_12-12-punktowa czcionka proporcjonalna Helvetica; znaki ASCII z przedziałów: [32, 126] i [160, 255]; GLUT BITMAP HELVETICA punktowa czcionka proporcjonalna Helvetica; znaki ASCII z przedziałów: [32, 126] i [160, 255];
26 Pisanie tekstu na ekranie Funkcja określająca położenie wyświetlanej grafiki rastrowej (w tym przypadku litery) void glrasterpos2i (GLint x, GLint y) void glrasterpos2f (GLfloat x, GLfloat y) Polecenia wyświetlające pojedynczą literę w punkcie x, y (z=0) glrasterpos2f (x,y); glutbitmapcharacter(glut_bitmap_helvetica_10, 'x'); Wersja z 3 wymiarami: void glrasterpos3i (GLint x, GLint y, GLint z) void glrasterpos3f (GLfloat x, GLfloat y, GLfloat z)
27 Przykład Funkcja wyświetlająca tekst w punkcie x,y (tablicę znaków zakończoną 0) void DrawString (int x, int y, char *string) glrasterpos2f (x,y); int len = strlen (string); for (int i = 0; i < len; i++) glutbitmapcharacter(glut_bitmap_helvetica_10, string [i]);
28 #include <GL/glut.h> #include <stdlib.h> #include <string.h> int main (int argc, char *argv[]) glutinit (&argc,argv); glutinitdisplaymode (GLUT_DOUBLE GLUT_RGB); glutinitwindowsize (600,600); glutcreatewindow ("Wersja OpenGL"); glutdisplayfunc (Display); glutreshapefunc (Reshape); glutmainloop (); return 0;
29 void Reshape (int width, int height) glviewport (0,0,width,height); glmatrixmode (GL_PROJECTION); glloadidentity (); gluortho2d (0,width-1,0,height-1); Display (); void Display () glclearcolor (1.0,1.0,1.0,1.0); glclear (GL_COLOR_BUFFER_BIT); glcolor3f (0.0,0.0,0.0); char string [2048]; strcpy (string,"gl_renderer: "); strcat (string,(char*)glgetstring (GL_RENDERER)); DrawString (0,height,string); height -= 16; strcpy (string,"gl_version: "); strcat (string,(char*)glgetstring (GL_VERSION)); DrawString (0,height,string); height -= 16; strcpy (string,"glu_version: "); strcat (string,(char*)glugetstring (GLU_VERSION)); DrawString (0,height,string); height -= 16; GLuint height = glutget (GLUT_WINDOW_HEIGHT) - 15; GLuint width = glutget (GLUT_WINDOW_WIDTH); strcpy (string,"gl_vendor: "); strcat (string,(char*)glgetstring (GL_VENDOR)); DrawString (0,height,string); height -= 16; glflush (); glutswapbuffers();
30 Bufor głębokości Bufor głębokości to obok bufora koloru podstawowy element bufora ramki czyli pamięci obrazu. Bufor głębokości, nazywany także z-buforem lub buforem głębi, uczestniczy w procesie usuwania niewidocznych elementów renderowanej sceny. Działanie bufora głębokości polega w uproszczeniu na przechowywaniu wartości współrzędnej z (głębokości) dla każdego piksela obrazu. Przy rysowaniu kolejnych pikseli danego obiektu obliczana jest wartość współrzędnej z i porównywana z wartością znajdująca się w buforze. Jeżeli porównanie wskazuje, ze rysowany piksel przesłania to, co zostało narysowane wcześniej, zmieniana jest zarówno zawartość bufora głębokości jak i bufora koloru.
31 Ustawienie bufora głębokości Korzystając z biblioteki GLUT, niezbędne jest dodanie stałej GLUT_DEPTH do wywołania funkcji glutinitdisplaymode Włączenie testowania głębokości wykonuje się poleceniem: glenable(gl_depth_test) Wyłączenie zapisywania wartości współrzędnych do bufora głębokości realizuje funkcja: void gldepthmask (GLboolean flag) Przyjmująca wartości GL_TRUE lub GL_FALSE
32 Testy bufora głębokości Biblioteka OpenGL umożliwia wybór rodzaju testu wykonywanego przy użyciu danych zawartych w buforze głębokości. Umożliwia to funkcja: void gldepthfunc (GLenum func) GL_NEVER - wartość testu zawsze negatywna, GL_LESS - wartość testu pozytywna jeżeli testowana wartość współrzędnej z jest mniejsza od wartości znajdującej się w buforze; wartość domyślna, GL_EQUAL - wartość testu pozytywna jeżeli testowana wartość współrzędnej z jest równa wartości znajdującej się w buforze, GL_LEQUAL - wartość testu pozytywna jeżeli testowana wartość współrzędnej z jest mniejsza lub równa wartości znajdującej się w buforze, GL_GREATER - wartość testu pozytywna jeżeli testowana wartość współrzędnej z jest większa od wartości znajdującej się w buforze, GL_NOTEQUAL - wartość testu pozytywna jeżeli testowana wartość współrzędnej z jest różna od wartości znajdującej się w buforze, GL_GEQUAL - wartość testu pozytywna jeżeli testowana wartość współrzędnej z jest większa lub równa wartości znajdującej się w buforze, GL_ALWAYS - wartość testu zawsze pozytywna.
33 Czyszczenie bufora głębokości Przez rozpoczęciem rysowania elementów sceny 3D konieczne jest wyczyszczenie zawartości bufora głębokości. Wymaga to dodania stałej GL_DEPTH_BUFFER_BIT przy wywołaniu funkcji glclear glclear(gl_depth_buffer_bit); Standardowo bufor głębokości zawiera liczby z przedziału [0,1] i jest czyszczony liczba 1. Można to zmienić wywołując funkcję void glcleardepth (GLclampd depth) depth jest liczba z przedziału [0, 1]
34 Zakres wartości bufora głębokości Bufor głębokości zawiera standardowo liczby z przedziału [0, 1]. Możliwa jest zmiana tego przedziału poprzez użycie funkcji: void gldepthrange (GLclampd znear, GLclampd zfar) Parametr znear określa minimalna wartość w buforze głębokości, a zfar maksymalna wartość w buforze głębokości. Wartości domyślne wynoszą oczywiście 0 i 1.
35 Przykład #include <GL/glut.h> const GLdouble left = -2.0; const GLdouble right = 2.0; const GLdouble bottom = -2.0; const GLdouble top = 2.0; const GLdouble near_ = 3.0; const GLdouble far_ = 7.0; void Reshape (int width, int height) glviewport (0,0,width,height); glmatrixmode (GL_PROJECTION); glloadidentity (); glfrustum (left,right,bottom,top,near_,far_); Display (); GLfloat rotatex = 0.0; GLfloat rotatey = 0.0; GLenum depth_test = GL_LESS; int main (int argc, char *argv[]) glutinit (&argc,argv); glutinitdisplaymode (GLUT_DOUBLE GLUT_RGB GLUT_DEPTH); glutinitwindowsize (500,500); glutcreatewindow ("Szescian 5"); glutdisplayfunc (Display); glutreshapefunc (Reshape); glutspecialfunc (SpecialKeys); glutkeyboardfunc (Keyboard); glutmainloop (); return 0;
36 void SpecialKeys (int key, int x, int y) switch (key) case GLUT_KEY_LEFT: rotatey -= 3; break; case GLUT_KEY_UP: rotatex -= 3; break; case GLUT_KEY_RIGHT: rotatey += 3; break; case GLUT_KEY_DOWN: rotatex += 3; break; Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT)); void Keyboard (unsigned char key, int x, int y) if (key=='1') depth_test = GL_NEVER; if (key=='2') depth_test = GL_LESS; if (key=='3') depth_test = GL_EQUAL; if (key=='4') depth_test = GL_LEQUAL; if (key=='5') depth_test = GL_GREATER; if (key=='6') depth_test = GL_NOTEQUAL; if (key=='7') depth_test = GL_GEQUAL; if (key=='8') depth_test = GL_ALWAYS; Display ();
37 void Display () glclearcolor (1.0,1.0,1.0,1.0); glclear (GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT); glmatrixmode (GL_MODELVIEW); glloadidentity (); glcolor3f (0,0,0); glvertex3f (-1.0,-1.0,-1.0); glcolor3f (0,0,1); glvertex3f (-1.0,1.0,-1.0); glcolor3f (0,1,1); glvertex3f (1.0,1.0,-1.0); gltranslatef (0,0,-(near_+far_)/2); glrotatef (rotatex,1.0,0,0); glrotatef (rotatey,0,1.0,0); glscalef (1.15,1.15,1.15); glenable (GL_DEPTH_TEST); gldepthfunc (depth_test); glcolor3f (0,1,0); glvertex3f (1.0,-1.0,-1.0); glcolor3f (0,0,0); glvertex3f (-1.0,-1.0,-1.0); glcolor3f (0,1,1); glvertex3f (1.0,1.0,-1.0); glend (); glbegin (GL_TRIANGLES); glcolor3f (1,0,0); glvertex3f (-1.0,-1.0,1.0); glcolor3f (1,1,0); glvertex3f (1.0,-1.0,1.0); glcolor3f (1,1,1); glvertex3f (1.0,1.0,1.0); ( ) glflush (); glutswapbuffers();
38 Przesunięcie wartości głębi Mechanizm pozwalający na przesuwanie wartości głębi pikseli przy rysowaniu wielokątów umożliwia funkcja void glpolygonoffset (GLfloat factor, GLfloat units) Gdzie factor i units domyślnie ustawione są na 0. Włącznie mechanizmu przesuwania wartości głębi włącza się poleceniem glenable( ) przekazując jeden z parametrów: GL_POLYGON_OFFSET_POINT - przesuwanie wartości głębi, gdy rysowane są tylko wierzchołki wielokątów, GL_POLYGON_OFFSET_LINE - przesuwanie wartości głębi, gdy rysowane są tylko krawędzie wielokątów, GL_POLYGON_OFFSET_FILL - przesuwanie wartości głębi, gdy rysowane są wypełnione wielokąty.
39 Przykład glcolor3f(1,0,0); glutsolidsphere(1,10,10); glcolor3f(0,0,0); glutwiresphere(1,10,10); glpolygonoffset(1,1); glenable(gl_polygon_offset_fill); glcolor3f(1,0,0); glutsolidsphere(1,10,10); glcolor3f(0,0,0); glutwiresphere(1,10,10);
40 Figury 3d wypełnione z biblioteki GLUT Kula void glutsolidsphere (GLdouble radius, GLint slices, GLint stacks) radius - promien kuli, slices - ilosc południków, stacks - ilosc równolezników. Sześcian void glutsolidcube (GLdouble size) size długość boku
41 Gotowe obiekty 3D z biblioteki GLUT cd Stożek void glutsolidcone (GLdouble base, GLdouble height, GLint slices, GLint stacks) base - promien podstawy stozka, height - wysokosc stozka, slices - ilosc tworzacych, stacks - ilosc południków Torus void glutsolidtorus (GLdouble innerradius, GLdouble outerradius, GLint sides, GLint rings) innerradius - promien koła tworzacego torus, outerradius - promien torusa, sides - ilosc scian bocznych, z których składa sie pojedynczy walec, rings - ilosc walców, z których składa sie torus
42 Gotowe obiekty 3D z biblioteki GLUT cd. Dwunastościan void glutsoliddodecahedron (void) Czajnik void glutsolidteapot (GLdouble size) size wielkość Ośmiościan void glutsolidoctahedron (void) Czworościan void glutsolidtetrahedron (void) Dwudziestoscian void glutsolidicosahedron (void)
43 Wybór, który z buforów składających się na bufor koloru wykorzystywany jest do renderingu umożliwia funkcja gldrawbuffer( ) Przekazywanymi argumentami mogą być GL_BACK, GL_FRONT, GL_NONE
44 Przykład glpolygonoffset(1,1); glenable(gl_polygon_offset_fill); glpushmatrix(); glrotatef(angle, 0, 1, 0); glcolor3f(1,0,0); glutsolidsphere(0.8, 10, 10); glcolor3f(0,0,0); glutwiresphere(0.8, 10, 10); glpopmatrix(); gldrawbuffer( GL_NONE ); glcolor3f (1.0,1.0,0.0); glbegin(gl_quads); glvertex3f(-0.6, -0.6, 1.01); glvertex3f( 0.6, -0.6, 1.01); glvertex3f( 0.6, 0.6, 1.01); glvertex3f(-0.6, 0.6, 1.01); glend(); gldrawbuffer( GL_BACK ); glcolor3f (1.0,1.0,1.0); glutsolidcube(2); glcolor3f (0.0,0.0,0.0); glutwirecube(2);
45 Listy wyświetlania Zasada działania list wyświetlania sprowadza się do grupowania (zwanego czasami niesłusznie kompilowaniem ) poleceń biblioteki OpenGL. Tak utworzona grupa poleceń identyfikowana jest identyfikatorem w postaci liczby całkowitej. Identyfikator ten umożliwia późniejsze wywołanie wybranej listy wyświetlania, czyli wykonanie poleceń biblioteki OpenGL w niej zapamiętanych. Może się przyczynić do zwiększenia szybkości wyświetlania grafiki.
46 Tworzenie listy wyświetlania Generowanie nowej listy wyświetlania rozpoczyna się poprzez wywołanie funkcji: void glnewlist (GLuint list, GLenum mode) list określa unikatowy identyfikator listy wyświetlania (musi to byc liczba wieksza od 0), mode definiuje tryb tworzenia listy wyświetlania GL_COMPILE - lista generowana w trybie zachowanym (ang. retained mode); polecenia umieszczane są na liście ale nie są wykonywane, GL_COMPILE_AND_EXECUTE - lista generowana w trybie bezpośrednim (ang. immediate mode); polecenia umieszczane są na liście i jednocześnie natychmiast wykonywane. Zakończenie tworzenia listy wyświetlania void glendlist ()
47 Generowanie numerów list Serie identyfikatorów do pustych list wyświetlania generuje funkcja: GLuint glgenlists (GLsizei range) zwraca numer identyfikatora pierwszej utworzonej listy wyświetlania. Następne utworzone listy maja identyfikatory o kolejnych wartościach aż do range-1
48 Listy wyświetlania void gldeletelists (GLuint list, GLsizei range) list - identyfikator pierwszej usuwanej listy range - ilość kolejnych list do usunięcia. Wywołanie poleceń listy wyświetlania void glcalllist (GLuint list) Wywołanie kolejno większej liczby listy wyświetlania void glcalllists (GLsizei n, GLenum type, const GLvoid *lists) n - określa liczbę elementów tablicy type - rodzaj elementów tablicy określa parametr,
49 Przykład #include <stdlib.h> #include <time.h> #include "glut.h" #include "colors.h" const GLdouble left = -2.0; const GLdouble right = 2.0; const GLdouble bottom = -2.0; const GLdouble top = 2.0; const GLdouble near = 3.0; const GLdouble far = 9.0; GLfloat rotatex = 0.0; GLfloat rotatey = 0.0; int drzewolist; int laslist; void Tree() glpolygonoffset(1,1); glenable(gl_polygon_offset_fill); glpushmatrix(); glscalef(0.5,0.5,0.5); glpushmatrix(); gltranslatef(0,0.3,0); glrotatef(-90,1,0,0); glcolor3f(0,1,0); glutsolidcone(0.5,1,10,10); glcolor3f(0,0,0); glutwirecone(0.5,1,10,10); glpopmatrix(); glpushmatrix(); glscalef(1,3,1); glcolor3f(1,0,0); glutsolidcube(0.2); glcolor3f(0,0,0); glutwirecube(0.2); glpopmatrix(); glpopmatrix();
50 void GenerateListDrzewo() drzewolist = glgenlists(1); glnewlist(drzewolist, GL_COMPILE); Tree(); glendlist(); void GenerateListLas() laslist = glgenlists(1); glnewlist(laslist, GL_COMPILE); srand(time(0)); for (int i=0; i<20; i++) float x = rand()/(float)rand_max * 4-2; float z = rand()/(float)rand_max * 4-2; glpushmatrix(); gltranslatef(x,0,z); Tree(); glpopmatrix(); glendlist();
51 void Display () glenable(gl_depth_test); glclearcolor (0.0,0.0,0.0,0.0); glclear (GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT); glmatrixmode (GL_MODELVIEW); glloadidentity (); gltranslatef (0,0,-(near+far)/2); void Reshape (int width, int height) glviewport (0,0,width,height); glmatrixmode (GL_PROJECTION); glloadidentity (); glfrustum (left,right,bottom,top,near,far); Display (); glrotatef (rotatex,1.0,0,0); glrotatef (rotatey,0,1.0,0); glcalllist(laslist); glflush (); glutswapbuffers();
52 void SpecialKeys (int key, int x, int y) switch (key) case GLUT_KEY_LEFT: case GLUT_KEY_UP: case GLUT_KEY_RIGHT: rotatey += 2; break; case GLUT_KEY_DOWN: rotatey -= 2; break; rotatex -= 2; break; rotatex += 2; break; int main (int argc, char *argv[]) glutinit (&argc,argv); glutinitdisplaymode (GLUT_DOUBLE GLUT_RGB GLUT_DEPTH); glutinitwindowsize (500,500); glutcreatewindow ("Z-bufor"); glutdisplayfunc (Display); glutreshapefunc (Reshape); glutspecialfunc (SpecialKeys); glutmainloop (); return 0; GenerateListLas(); Reshape (glutget (GLUT_WINDOW_WIDTH),glutGet (GLUT_WINDOW_HEIGHT));
Prosty program- cpp. #include <GL/glut.h>
Wizualizacje 3D Prosty program- cpp #include #include #include int main(int argc, char** argv) { glutinit(&argc, argv); glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA ); glutinitwindowsize(400,
Bardziej szczegółowoWprowadzenie do programowania z wykorzystaniem biblioteki OpenGL. Dorota Smorawa
Wprowadzenie do programowania z wykorzystaniem biblioteki OpenGL Dorota Smorawa Pierwszy program Pierwszy program będzie składał się z trzech etapów: Funkcji rysującej scenę 3D, Inicjacji okna renderingu,
Bardziej szczegółowoGRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie
GRAFIKA KOMPUTEROWA 7: Kolory i cieniowanie http://galaxy.agh.edu.pl/~mhojny Prowadzący: dr inż. Hojny Marcin Akademia Górniczo-Hutnicza Mickiewicza 30 30-059 Krakow pawilon B5/p.406 tel. (+48)12 617 46
Bardziej szczegółowoJanusz Ganczarski. OpenGL Pierwszy program
Janusz Ganczarski OpenGL Pierwszy program Spis treści Spis treści..................................... 1 1. Pierwszy program.............................. 1 1.1. Rysowanie sceny 3D...........................
Bardziej szczegółowoTemat: Wprowadzenie do OpenGL i GLUT
Instrukcja laboratoryjna 8 Grafika komputerowa 3D Temat: Wprowadzenie do OpenGL i GLUT Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny OpenGL
Bardziej szczegółowoGrafika 3D OpenGL część II
#include #include #include float kat=0.0f; void renderujscene(void) { glclearcolor(1.0f,1.0f,1.0f,1.0f); glclear(gl_color_buffer_bit); glpushmatrix(); glrotatef(kat,0,0,1);
Bardziej szczegółowoJanusz Ganczarski. OpenGL Definiowanie sceny 3D
Janusz Ganczarski OpenGL Definiowanie sceny 3D Spis treści Spis treści..................................... 1 1. Definiowanie sceny 3D........................... 1 1.1. Obszar renderingu............................
Bardziej szczegółowoElementarne obiekty geometryczne, bufory. Dorota Smorawa
Elementarne obiekty geometryczne, bufory Dorota Smorawa Elementarne obiekty Tworząc scenę 3D, od najprostszej, po najbardziej skomplikowaną, używamy obiektów złożonych, przede wszystkim podstawowych, elementarnych
Bardziej szczegółowoTemat: Transformacje 3D
Instrukcja laboratoryjna 11 Grafika komputerowa 3D Temat: Transformacje 3D Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny Bardzo często programując
Bardziej szczegółowo3 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 3 1/5 Grafika Komputerowa 3D Instrukcja laboratoryjna Temat: Rysowanie prymitywów 3 Przygotował: mgr inż. Maciej Lasota 1) Rysowanie prymitywów Podstawową rodziną funkcji wykorzystywanych
Bardziej szczegółowo8 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 8 1/6 Grafika Komputerowa Instrukcja laboratoryjna Temat: Listy wyświetlania i tablice wierzchołków 8 Przygotował: mgr inż. Maciej Lasota 1) Listy wyświetlania Listy wyświetlania (ang.
Bardziej szczegółowoRzutowanie DOROTA SMORAWA
Rzutowanie DOROTA SMORAWA Rzutowanie Rzutowanie jest operacja polegająca na tym, aby odpowiednie piksele na płaskim ekranie były wyświetlane w taki sposób, by sprawiać wrażenie trójwymiarowej głębi (przestrzeni
Bardziej szczegółowoOPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE
OPENGL PRZEKSZTAŁCENIA GEOMETRYCZNE SPIS TREŚCI 1. Przekształcenia geometryczne... 3 1.1. Obrót... 3 1.2. Skalowanie... 3 1.3. Przesunięcie... 3 1.4. Mnożenie macierzy... 4 1.5. Ładowanie macierzy... 4
Bardziej szczegółowoGrafika komputerowa Wstęp do OpenGL
Instytut Informatyki Politechniki Warszawskiej Grafika komputerowa Wstęp do OpenGL Zbigniew Szymański z.szymanski@ii.pw.edu.pl listopad 2008 - v1 Prowadzący zajęcia: Sprawy organizacyjne /1/ Zbigniew Szymański
Bardziej szczegółowoglwindowpos2d void DrawString (GLint x, GLint y, char *string) { glwindowpos2i (x,y); int len = strlen (string); for (int i = 0; i < len; i++)
Wizualizacja 3D glwindowpos2d Funkcja wprowadzona w wersji 1.4 biblioteki OpenGL Funkcja pozwala na ustawienie rastra względem okna, a nie względem macierzy modelu Stosowana podczas pisania tekstów, np.:
Bardziej szczegółowoCo to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych. Wykład 5. OpenGL - Achitektura. OpenGL - zalety. olas@icis.pcz.
Co to jest OpenGL? Oprogramowanie i wykorzystanie stacji roboczych Wykład 5 Dr inż. Tomasz Olas olas@icis.pcz.pl OpenGL (Open Graphics Library) jest niskopoziomowa biblioteka graficzna (API - programowy
Bardziej szczegółowoGrafika komputerowa Wstęp do OpenGL
Instytut Informatyki Politechniki Warszawskiej Grafika komputerowa Wstęp do OpenGL Zbigniew Szymański z.szymanski@ii.pw.edu.pl listopad 2008 - v1 listopad 2010 - v1d kwiecień 2013 v1e Prowadzący zajęcia:
Bardziej szczegółowo2 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 2 1/6 Grafika Komputerowa 3D Instrukcja laboratoryjna Temat: Manipulowanie przestrzenią 2 Przygotował: mgr inż. Maciej Lasota 1) Manipulowanie przestrzenią Istnieją dwa typy układów współrzędnych:
Bardziej szczegółowoOprogramowanie i wykorzystanie stacji roboczych. Wykład 6
Wykład 6 p. 1/2 Oprogramowanie i wykorzystanie stacji roboczych Wykład 6 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Wektory normalne
Bardziej szczegółowo1 Wstęp teoretyczny. Temat: Manipulowanie przestrzenią. Grafika komputerowa 3D. Instrukcja laboratoryjna Układ współrzędnych
Instrukcja laboratoryjna 9 Grafika komputerowa 3D Temat: Manipulowanie przestrzenią Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny 1.1 Układ
Bardziej szczegółowoZatem standardowe rysowanie prymitywów wygląda następująco:
Instrukcja laboratoryjna 10 Grafika komputerowa 3D Temat: Prymitywy Przygotował: dr inż. Grzegorz Łukawski, mgr inż. Maciej Lasota, mgr inż. Tomasz Michno 1 Wstęp teoretyczny Prymitywy proste figury geometryczne,
Bardziej szczegółowoOprogramowanie i wykorzystanie stacji roboczych. Wykład 5
Wykład 5 p. 1/? Oprogramowanie i wykorzystanie stacji roboczych Wykład 5 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Wykład 5 p. 2/? Co
Bardziej szczegółowoGRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL
GRAFIKA CZASU RZECZYWISTEGO Wprowadzenie do OpenGL Grafika komputerowa i wizualizacja, Bioinformatyka S1, II Rok OpenGL Open Graphics Library Jest to API pozwalające na renderowanie grafiki w czasie rzeczywistym,
Bardziej szczegółowoEfekt lustra 3D w OpenGL z wykorzystaniem bufora szablonowego (stencil buffer)
Efekt lustra 3D w OpenGL z wykorzystaniem bufora szablonowego (stencil buffer) Autor: Radosław Płoszajczak Spis treści I. Wstęp...2 II. Metoda rysująca przeźroczystą szybę...2 III. Bufor szablonowy (stencil
Bardziej szczegółowoWizualizacja 3D. dr inż. Marcin Gabryel
Wizualizacja 3D dr inż. Marcin Gabryel Modele braw CMYK (Cyan, Magenta, Yellow, black) RGB (Red, Green, Blue) HSV (Hue, Saturation, Value) RGB Model polega na sumowaniu sygnałów w poszczególnych kanałach.
Bardziej szczegółowo6 Przygotował: mgr inż. Maciej Lasota
Laboratorium nr 6 1/7 Grafika Komputerowa 3D Instrukcja laboratoryjna Temat: Materiały i oświetlenie 6 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie Specyfikacja biblioteki OpenGL rozróżnia trzy
Bardziej szczegółowoRysowanie punktów na powierzchni graficznej
Rysowanie punktów na powierzchni graficznej Tworzenie biblioteki rozpoczniemy od podstawowej funkcji graficznej gfxplot() - rysowania pojedynczego punktu na zadanych współrzędnych i o zadanym kolorze RGB.
Bardziej szczegółowoŚwiatło. W OpenGL można rozróżnić 3 rodzaje światła
Wizualizacja 3D Światło W OpenGL można rozróżnić 3 rodzaje światła Światło otaczające (ambient light) równomiernie oświetla wszystkie elementy sceny, nie pochodzi z żadnego konkretnego kierunku Światło
Bardziej szczegółowoMateriały. Dorota Smorawa
Materiały Dorota Smorawa Materiały Materiały, podobnie jak światła, opisywane są za pomocą trzech składowych. Opisują zdolności refleksyjno-emisyjne danej powierzchni. Do tworzenia materiału służy funkcja:
Bardziej szczegółowo// Potrzebne do memset oraz memcpy, czyli kopiowania bloków
ZAWARTOŚCI 3 PLIKOW W WORDZIE: MAIN.CPP: #include #include #include pamięci // Potrzebne do memset oraz memcpy, czyli kopiowania bloków #include "Rysowanie_BMP.h" using
Bardziej szczegółowoLaboratorium 1. Część I. Podstawy biblioteki graficznej OpenGL.
Laboratorium 1 Część I Podstawy biblioteki graficznej OpenGL. I. Konfiguracja środowiska 1. Ściągamy bibliotekę freeglut i rozpakujemy do głównego folderu dysku systemowego np. C:\freeglut 2. Uruchamiamy
Bardziej szczegółowoProgramowanie OpenGL
Programowanie OpenGL Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki Instytut Informatyki Programowanie OpenGL Rafał Stęgierski Lublin 2011 Instytut Informatyki UMCS Lublin
Bardziej szczegółowoLaboratorium grafiki komputerowej i animacji. Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny
Laboratorium grafiki komputerowej i animacji Ćwiczenie V - Biblioteka OpenGL - oświetlenie sceny Przygotowanie do ćwiczenia: 1. Zapoznać się ze zdefiniowanymi w OpenGL modelami światła i właściwości materiałów.
Bardziej szczegółowoStudium podyplomowe. Programowanie w OpenGL. Michał Turek, AGH Kraków
Studium podyplomowe Programowanie w OpenGL Michał Turek, AGH Kraków Charakterystyka (I) OpenGL - (Open Graphics Library) Graficzna biblioteka 2D/3D Liczne porty biblioteki, w tym takŝe akcelerowane sprzętowo
Bardziej szczegółowoLaboratorium Grafiki Komputerowej i Animacji. Ćwiczenie VI. Biblioteka OpenGL - teksturowanie
Laboratorium Grafiki Komputerowej i Animacji Ćwiczenie VI Biblioteka OpenGL - teksturowanie Sławomir Samolej Rzeszów, 1999 1. Wstęp Podczas tworzenia skomplikowanych obiektów graficznych przydatnym mechanizmem
Bardziej szczegółowoOpenGL teksturowanie
OpenGL teksturowanie Teksturowanie polega na pokrywaniu wielokątów obrazami (plikami graficznymi) Umożliwia znaczące zwiększenie realizmu sceny przy niewielkim zwiększeniu nakładu obliczeniowego Rozwój
Bardziej szczegółowoProgramowanie OpenGL
Programowanie OpenGL Uniwersytet Marii Curie-Skłodowskiej Wydział Matematyki, Fizyki i Informatyki Instytut Informatyki Programowanie OpenGL Rafał Stęgierski Lublin 2011 Instytut Informatyki UMCS Lublin
Bardziej szczegółowoOświetlenie w OpenGL. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 8. Światło otaczajace. Światło rozproszone.
Oświetlenie w OpenGL Oprogramowanie i wykorzystanie stacji roboczych Wykład 8 Dr inż. Tomasz Olas olas@icis.pcz.pl W OpenGL źródło światła w scenie składa się z trzech składowych oświetlenia: otoczenia,
Bardziej szczegółowoSpecyfikacja OpenGL Podstawy programowania grafiki komputerowej*
Specyfikacja OpenGL Podstawy programowania grafiki komputerowej* Mirosław Głowacki 1,2 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Bardziej szczegółowoOpenGL - maszyna stanu. Oprogramowanie i wykorzystanie stacji roboczych. Wykład 7. Grupy atrybutów. Zmienne stanu.
OpenGL - maszyna stanu Oprogramowanie i wykorzystanie stacji roboczych Wykład 7 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska OpenGL posiada
Bardziej szczegółowoBaltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup
Baltie 3 Podręcznik do nauki programowania dla klas I III gimnazjum Tadeusz Sołtys, Bohumír Soukup Czytanie klawisza lub przycisku myszy Czytaj klawisz lub przycisk myszy - czekaj na naciśnięcie Polecenie
Bardziej szczegółowoDruga aplikacja Prymitywy, alpha blending, obracanie bitmap oraz mały zestaw przydatnych funkcji wyświetlających własnej roboty.
Przyszedł czas na rysowanie własnych figur, czyli prymitywy, obracanie bitmap, oraz alpha blending-czyli półprzezroczystość. Będę opisywał tylko rzeczy nowe-nie ma potrzeby abym się powtarzał. Zaczynajmny
Bardziej szczegółowoGRAFIKA RASTROWA. WYKŁAD 1 Wprowadzenie do grafiki rastrowej. Jacek Wiślicki Katedra Informatyki Stosowanej
GRAFIKA RASTROWA WYKŁAD 1 Wprowadzenie do grafiki rastrowej Jacek Wiślicki Katedra Informatyki Stosowanej Grafika rastrowa i wektorowa W grafice dwuwymiarowej wyróżnia się dwa rodzaje obrazów: rastrowe,
Bardziej szczegółowoOpenGL model oświetlenia
Składowe światła OpenGL Światło otaczające (ambient) OpenGL model oświetlenia Nie pochodzi z żadnego określonego kierunku. Powoduje równomierne oświetlenie obiektów na wszystkich powierzchniach i wszystkich
Bardziej szczegółowoGRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów
GRAFIKA KOMPUTEROWA 8: Konwersja i mieszanie kolorów http://galaxy.agh.edu.pl/~mhojny Prowadzący: dr inż. Hojny Marcin Akademia Górniczo-Hutnicza Mickiewicza 30 30-059 Krakow pawilon B5/p.406 tel. (+48)12
Bardziej szczegółowoPrzekształcenia geometryczne. Dorota Smorawa
Przekształcenia geometryczne Dorota Smorawa Przekształcenia geometryczne Na poprzednich laboratoriach już dowiedzieliśmy się, na czym polegają podstawowe przekształcenia geometryczne. Trzy podstawowe przekształcenia
Bardziej szczegółowoGRAFIKA. Rodzaje grafiki i odpowiadające im edytory
GRAFIKA Rodzaje grafiki i odpowiadające im edytory Obraz graficzny w komputerze Może być: utworzony automatycznie przez wybrany program (np. jako wykres w arkuszu kalkulacyjnym) lub urządzenie (np. zdjęcie
Bardziej szczegółowoFormaty obrazów rastrowych biblioteki PBM
Formaty obrazów rastrowych biblioteki PBM Reprezentacja obrazu Obrazy pobierane z kamery, bądź dowolnego innego źródła, mogą być składowane na pliku dyskowym w jednym z wielu istniejących formatów zapisu
Bardziej szczegółowoMieszanie kolorów. Dorota Smorawa
Mieszanie kolorów Dorota Smorawa Tworzenie efektu przezroczystości Biblioteka OpenGL umożliwia nam tworzenie bardzo ciekawych efektów związanych z przezroczystością i odbiciem. Aby zrealizować efekt przezroczystości
Bardziej szczegółowoOpenGL. Silicon Graphics (IRIS GL stacje graficzne)
OpenGL. Silicon Graphics (IRIS GL stacje graficzne) Biblioteka -przestrzeń 3D -rzutowanie -prymitywy graficzne -operacje na barwach HISTORIA 1992 - powstaje wersja 1.0 specyfikacji OpenGL przenośnej między
Bardziej szczegółowoGrafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki
Grafika komputerowa INSTRUKCJA DO LABORATORIUM 2: operacje przestrzenne oraz obsługa klawiatury i myszki Strona 1 z 9 C E L Ć W I C Z E N I A Celem ćwiczenia jest zapoznanie się z podstawowymi operacjami
Bardziej szczegółowoSystem graficzny. Potok graficzny 3D. Scena 3D Zbiór trójwymiarowych danych wejściowych wykorzystywanych do wygenerowania obrazu wyjściowego 2D.
System graficzny scena 3D algorytm graficzny obraz 2D Potok graficzny 3D Radosław Mantiuk Dane wejściowe Algorytm tworzący obraz wyjściowy na podstawie sceny 3D Dane wyjściowe Wydział Informatyki Zachodniopomorski
Bardziej szczegółowoOpenGL Zaawansowana grafika komputerowa
p. 1/63 OpenGL Zaawansowana grafika komputerowa p. 2/63 Czym jest OpenGL OpenGL można zdefiniować jako "programowy interfejs sprzętu graficznego". Jest to biblioteka przeznaczona do tworzenia trójwymiarowej
Bardziej szczegółowoWstęp... 19 1. Podstawy... 23. 2. Pierwszy program... 29. 3. Definiowanie sceny 3D... 35. 4. Przekształcenia geometryczne... 47
Spis treści 3 Wstęp... 19 1. Podstawy... 23 1.1. Składnia...24 1.2. Typy danych...25 1.3. Układ współrzędnych...25 1.4. Barwy...26 1.5. Bufor ramki...26 1.6. Okno renderingu...26 1.7. Maszyna stanów...27
Bardziej szczegółowoGRAFIKA KOMPUTEROWA 10: Antyaliasing
GRAFIKA KOMPUTEROWA 10: Antyaliasing http://galaxy.agh.edu.pl/~mhojny Prowadzący: dr inż. Hojny Marcin Akademia Górniczo-Hutnicza Mickiewicza 30 30-059 Krakow pawilon B5/p.406 tel. (+48)12 617 46 37 e-mail:
Bardziej szczegółowoSzybkie tworzenie grafiki w GcIde
Szybkie tworzenie grafiki w GcIde Opracował: Ryszard Olchawa Poniższy opis dotyczy aplikacji okienkowej w systemie Windows lub Linux bazującej na obiektowej bibliotece rofrm stworzonej w środowisku GcIde.
Bardziej szczegółowo1. Prymitywy graficzne
1. Prymitywy graficzne Prymitywy graficzne są elementarnymi obiektami jakie potrafi bezpośrednio rysować, określony system graficzny (DirectX, OpenGL itp.) są to: punkty, listy linii, serie linii, listy
Bardziej szczegółowoPodstawy programowania w języku C i C++
Podstawy programowania w języku C i C++ Część czwarta Operatory i wyrażenia Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu,
Bardziej szczegółowoZadanie 1. Ściana. 1. Potrzebne zmienne w dołączonym do zadania kodzie źródłowym
Zadanie 1. Ściana Zadanie W pliku walls.cpp znajduje się funkcja void draw_back_wall(). Należy uzupełnić ją, ustawiając odpowiednio parametry teksturowania tak, aby na ścianę, która w pierwotnej wersji
Bardziej szczegółowoGrafika rastrowa (bitmapa)-
Grafika komputerowa Grafika rastrowa Grafika rastrowa (bitmapa)- sposób zapisu obrazów w postaci prostokątnej tablicy wartości, opisujących kolory poszczególnych punktów obrazu (prostokątów składowych).
Bardziej szczegółowoFormaty plików graficznych - wprowadzenie
Formaty plików graficznych - wprowadzenie Obraz graficzny jest dwuwymiarową tablicą pikseli, zwana czasem rastrem. Kolor piksela może być reprezentowany w następujący sposób: Dla obrazów monochromatycznych
Bardziej szczegółowo1. Wprowadzanie danych z klawiatury funkcja scanf
1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),
Bardziej szczegółowoObcinanie grafiki do prostokąta
Obcinanie grafiki do prostokąta Tworząc różnego rodzaju grafikę komputerową bardzo szybko natrafisz na sytuację, gdy rysowane obiekty "wychodzą" poza obszar ekranu. W takim przypadku kontynuowanie rysowania
Bardziej szczegółowoGRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego.
GRAFIKA CZASU RZECZYWISTEGO Wstęp do programowania grafiki czasu rzeczywistego. http://bazyluk.net/zpsb Grafika Komputerowa, Informatyka, I Rok PROGRAMOWANIE GRAFIKI KOMPUTEROWEJ CZASU RZECZYWISTEGO Grafika
Bardziej szczegółowoOpenGL Światło (cieniowanie)
OpenGL Światło (cieniowanie) 1. Oświetlenie włączanie/wyłączanie glenable(gl_lighting); - włączenie mechanizmu oświetlenia gldisable(gl_lighting); - wyłączenie mechanizmu oświetlenia glenable(gl_light0);
Bardziej szczegółowodr inż. Jacek Dąbrowski, KSG
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
Bardziej szczegółowoANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM)
ANALIZA I INDEKSOWANIE MULTIMEDIÓW (AIM) LABORATORIUM 5 - LOKALIZACJA OBIEKTÓW METODĄ HISTOGRAMU KOLORU 1. WYBÓR LOKALIZOWANEGO OBIEKTU Pierwszy etap laboratorium polega na wybraniu lokalizowanego obiektu.
Bardziej szczegółowoWykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, 2014. Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik
Wykład VI Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2014 c Copyright 2014 Janusz Słupik Operacje na plikach Operacje na plikach Aby móc korzystać z pliku należy go otworzyć w odpowiednim
Bardziej szczegółowoKurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/
Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Obsługa obrazków w PHP Wprowadzenie Tworzenie i niszczenie obrazka Kolory Funkcje od obsługi obrazków - 1 - Wprowadzenie Przygotowanie
Bardziej szczegółowoCzęść 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Bardziej szczegółowo1 Temat: Vertex Shader
Instrukcja Architektura procesorów graficznych 1 Temat: Vertex Shader Przygotował: mgr inż. Tomasz Michno 1 Wstęp 1.1 Czym jest shader Shader jest programem (zazwyczaj krótkim), wykonywanym przez kartę
Bardziej szczegółowoPliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego
Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego 1 /24 Pisanie pojedynczych znaków z klawiatury do pliku #include void main(void) { FILE *fptr; // wkaznik do pliku, tzw. uchwyt
Bardziej szczegółowoGrafika komputerowa. Dla DSI II
Grafika komputerowa Dla DSI II Rodzaje grafiki Tradycyjny podział grafiki oznacza wyróżnienie jej dwóch rodzajów: grafiki rastrowej oraz wektorowej. Różnica pomiędzy nimi polega na innej interpretacji
Bardziej szczegółowoWprowadzenie do klas w C++ oraz biblioteki opengl
Wprowadzenie do klas w C++ oraz biblioteki opengl 1. Bibliotek opengl. W celu rozpoczęcia pracy z użyciem biblioteki opengl należy pobrać pliki archiwum glut- 3.7.6.zip ze strony: http://www.opengl.org/resources/libraries/glut/glut_downloads.php
Bardziej szczegółowoĆwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:
Ćwiczenie nr 6 Temat: Operacje na łańcuchach znaków. Zagadnienia: Zasady pracy z łańcuchami tekstowymi (tablice wartości typu char). funkcje standardowe operacji na łańcuchach, funkcje I/O dla operacji
Bardziej szczegółowoProgramowanie Równoległe wykład, 21.01.2013. CUDA, przykłady praktyczne 1. Maciej Matyka Instytut Fizyki Teoretycznej
Programowanie Równoległe wykład, 21.01.2013 CUDA, przykłady praktyczne 1 Maciej Matyka Instytut Fizyki Teoretycznej Motywacja l CPU vs GPU (anims) Plan CUDA w praktyce Wykład 1: CUDA w praktyce l aplikacja
Bardziej szczegółowoPodstawy grafiki komputerowej. Teoria obrazu.
WAŻNE POJĘCIA GRAFIKA KOMPUTEROWA - to dział informatyki zajmujący się wykorzystaniem oprogramowania komputerowego do tworzenia, przekształcania i prezentowania obrazów rzeczywistych i wyimaginowanych.
Bardziej szczegółowoOpenGL Światło (cieniowanie)
OpenGL Światło (cieniowanie) 1. Oświetlenie włączanie/wyłączanie glenable(gl_lighting); - włączenie mechanizmu oświetlenia gldisable(gl_lighting); - wyłączenie mechanizmu oświetlenia glenable(gl_light0);
Bardziej szczegółowoWykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z
Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. Funkcje OpenGL
Bardziej szczegółowoOpenGL oświetlenie i tekstury. OpenGL oświetlenie. Bogdan Kreczmer.
OpenGL oświetlenie Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2018 Bogdan Kreczmer Niniejszy dokument zawiera
Bardziej szczegółowoOpenGL przezroczystość
OpenGL przezroczystość W standardzie OpenGL efekty przezroczystości uzyskuje się poprzez zezwolenie na łączenie kolorów: Kolor piksela tworzy się na podstawie kolorów obiektu przesłanianego i przesłaniającego
Bardziej szczegółowoJęzyki programowania obiektowego Nieobiektowe elementy języka C++
Języki programowania obiektowego Nieobiektowe elementy języka C++ Roman Simiński roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Przetwarzanie tablic znaków Łańcuchy znakowe jako tablice znaków
Bardziej szczegółowoint tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania
Rok akademicki 2013/2014, Pracownia nr 10 2/20 Informatyka 1 Tablica elementów ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu Politechnika Białostocka - Wydział Elektryczny Elektrotechnika,
Bardziej szczegółowoJSLib 4.1 Dokumentacja
28 kwietnia 2015 JSLib 4.1 Dokumentacja Spis treści 1 Wprowadzenie 2 2 Klasa BigInt 2 2.1 Tworzenie liczb....................... 2 2.2 Operacje wejścia-wyjścia.................. 3 2.3 Operatory..........................
Bardziej szczegółowoGrafika Komputerowa, Informatyka, I Rok
SYNTEZA GRAFIKI 3D Grafika realistyczna i czasu rzeczywistego. Wstęp do programowania grafiki 3D z użyciem OpenGL. Transformacje geometryczne. Grafika Komputerowa, Informatyka, I Rok Synteza grafiki 3D
Bardziej szczegółowoŚwiatła i rodzaje świateł. Dorota Smorawa
Światła i rodzaje świateł Dorota Smorawa Rodzaje świateł Biblioteka OpenGL posiada trzy podstawowe rodzaje świateł: światło otoczenia, światło rozproszone oraz światło odbite. Dodając oświetlenie na scenie
Bardziej szczegółowoWykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library. OpenGL składa się z
Wykład 12. Wprowadzenie do malarstwa, str. 1 OpenGL Open Graphics Library OpenGL składa się z teoretycznego modelu grafiki 3D, zestawu typów i funkcji obsługujących różne cechy tego modelu. WjęzykuC: pliki
Bardziej szczegółowoWstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 12 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Obsługa łańcuchów znakowych getchar(), putchar()
Bardziej szczegółowoGrafika Komputerowa Wykład 5. Potok Renderowania Oświetlenie. mgr inż. Michał Chwesiuk 1/38
Wykład 5 Potok Renderowania Oświetlenie mgr inż. 1/38 Podejście śledzenia promieni (ang. ray tracing) stosuje się w grafice realistycznej. Śledzone są promienie przechodzące przez piksele obrazu wynikowego
Bardziej szczegółowoWizualne systemy programowania. Wykład 11 Grafika. dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD
Wizualne systemy programowania Wykład 11 Grafika 1 dr Artur Bartoszewski -Wizualne systemy programowania, sem. III- WYKŁAD Grafika GDI+ GDI+ - Graphics Device Interface jeden z trzech podstawowych komponentów
Bardziej szczegółowoWarsztaty dla nauczycieli
WPROWADZENIE Wyprowadzanie danych: Wyprowadzanie na ekran komunikatów i wyników umożliwia instrukcja wyjścia funkcja print(). Argumentami funkcji (podanymi w nawiasach) mogą być teksty, wyrażenia arytmetyczne
Bardziej szczegółowoOpenGL oświetlenie. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska
OpenGL oświetlenie Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2017 Bogdan Kreczmer Niniejszy dokument zawiera
Bardziej szczegółowoKRYPTOGRAFIA I OCHRONA DANYCH PROJEKT
KRYPTOGRAFIA I OCHRONA DANYCH PROJEKT Temat: Zaimplementować system kryptografii wizualnej http://www.cacr.math.uwaterloo.ca/~dstinson/visual.html Autor: Tomasz Mitręga NSMW Grupa 1 Sekcja 2 1. Temat projektu
Bardziej szczegółowoTekstury. Dorota Smorawa
Tekstury Dorota Smorawa Definiowanie obiektów tekstur Dodawanie tekstur należy rozpocząć od zdefiniowania nazw tekstur ładowanych do bufora. Dla ułatwienia pracy z teksturami możemy przygotować obiekty
Bardziej szczegółowoOpenGL i Qt. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska
w Qt i Qt Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Katedra Cybernetyki i Robotyki Wydziału Elektroniki Politechnika Wrocławska Kurs: Copyright c 2019 Bogdan Kreczmer Niniejszy dokument zawiera materiały
Bardziej szczegółowo1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Bardziej szczegółowoBartosz Bazyluk Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia.
Wprowadzenie Organizacja i tematyka zajęć, warunki zaliczenia http://bazyluk.net/dydaktyka Grafika Komputerowa i Wizualizacja, Informatyka S1, II Rok O MNIE mgr inż. Pokój 322/WI2 lub 316/WI2 bbazyluk@wi.zut.edu.pl
Bardziej szczegółowoStałe i zmienne znakowe. Stała znakowa: znak
Stałe i zmienne znakowe. Stała znakowa: znak Na przykład: a, 1, 0 c Każdy znak jest reprezentowany w pamięci przez swój kod. Kody alfanumerycznych znaków ASCII to liczby z przedziału [32, 127]. Liczby
Bardziej szczegółowo8. Dynamiczne generowanie grafiki, cz. 2
8. Dynamiczne generowanie grafiki, cz. 2 8.1. Generowanie tekstu Chociaż tekst można umieścić na grafice korzystając z HTML (używając grafiki jako tła obiektu), często wygodniej jest umieścić tekst bezpośrednio
Bardziej szczegółowo