Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1 Pixelek, Bittérképek, Fontok, Képek. 2 Miről lesz szó? ► Bittérképek pozicionálása, rajzolása ► Pixeladatok kiolvasása, beírása a színbufferbe ► Pixeladatok.

Hasonló előadás


Az előadások a következő témára: "1 Pixelek, Bittérképek, Fontok, Képek. 2 Miről lesz szó? ► Bittérképek pozicionálása, rajzolása ► Pixeladatok kiolvasása, beírása a színbufferbe ► Pixeladatok."— Előadás másolata:

1 1 Pixelek, Bittérképek, Fontok, Képek

2 2 Miről lesz szó? ► Bittérképek pozicionálása, rajzolása ► Pixeladatok kiolvasása, beírása a színbufferbe ► Pixeladatok másolása, bufferek között vagy bufferen belül egy másik pozícióba ► Képek nagyítása, kicsinyítése ► Pixel adatok formázása, transzformációk

3 3 Bitmap, Image ► Bitmap, Image: pixelek négyzet alakú tartománya  Bitmap: 0, és 1 értékeket tartalmaz. Megjelenési színe az aktuális színbeállítástól függ.  Image: RGBA komponenseket tartalmaz  Image kirajzolásra során blending is alkalmazható  Bitmap kirajzolásra során logikai műveletek lehetnek (per-fragment operációk)

4 4 Bitmap, Image glRasterPos{234}{sifd}{v}(TYPE x, TYPE y, TYPE z, TYPE w); Aktuális raszterpozíció beállítása az X, Y, Z, W pozícióba. A raszter pozíció a vertexekkel azonos koordináta transzformációkon megy át. Ha a transzformált raszterpozíció a viewporton kívül esik, akkor a raszterpozíció invalid. glGetFloatv(GL_CURRENT_RASTER_POSITION, vect); segítségével lekérdezhető az aktuális raszterpozíció. A második paraméter 4 elemű tömbre mutató pointer. glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID); lekérdezhető, hogy az aktuális raszterpozíció a viewporton belül van e.

5 5 Bitmap GLubyte bitmap[24] = { 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0x00, 0xff, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0xff, 0xc0, 0xff, 0xc0 };

6 6 Kirajzolás glBitmap(GLsizei width, GLsizei height, GLFloat xo, GLFloat yo, GLFloat ox, GLFloat oy, const GLubyte *bitmap); widht, height: szélesség és magasság pixelben megadva xo, yo: az bitmap origo x,y koordinátái. Ha nem nulla, akkor pozitív értékek az origót fel illetve jobbra mozgatják, a negatív értékek pedig le illetve balra. ox, oy: a raszterpozíció eltolása a kirajzolás után

7 7 Feladat F-kirajzolása ► drawf.cpp  feladatok: ► Teszteljük a valid és invalid raszterpozíciót: unsigned char a; glGetBooleanv(GL_CURRENT_RASTER_POSITION_VALID,&a); if (a== GL_TRUE) printf("valid\n"); else printf("invalid\n"); ► Változtassuk a bitmap origóját. ► Változtassuk az bitmap raszterpozíció eltolásértéket.

8 8 GLut font lehetőségek ► Kétféle fonttípust támogat: stroke font és bitmap font ► Stroke font: vonalakból áll, transzformációk után nem torzul ► Bitmap font: lásd előző oldalak Példa: glutfont.cpp void glutBitmapCharacter(void *font, int character); font: pl. GLUT_BITMAP_8_BY_13, GLUT_BITMAP_9_BY_15, GLUT_BITMAP_TIMES_ROMAN_10, GLUT_BITMAP_HELVETICA_10 void glutStrokeCharacter(void *font, int character); font: pl. GLUT_STROKE_ROMAN, GLUT_STROKE_MONO_ROMAN

9 9 Képek (Images) ► Kép beolvasása:  glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); Beolvas x,y pozíciótól kezdődően width és height méretű téglalap alakú tartományt a *pixels tömbbe. A pixel-fomátumnak megfelelő és adott típusú adatelemekkel dolgozik, a táblázat szerint.

10 10 névtípus GL_COLOR_INDEX color index GL_RGB piros, zöld, kék komponensek GL_RGBA piros, zöld, kék, alpha komponensek GL_RED piros komponens GL_GREEN zöld komponens GL_BLUE kék komponens GL_ALPHA alpha komponens GL_LUMINANCE fényerősség komponens GL_LUMINANCE_ALPHA fényerősség és alpha komponens GL_STENCIL_INDEX stencil komponens GL_DEPTH_COMPONENET z-buffer komponens A format paraméter lehetséges értékei

11 11 névadattípus GL_UNSIGNED_BYTE előjel nélküli 8-bites egész GL_BYTE előjeles 8-bites egész GL_BITMAP 8 bites egészben tárolt bitek GL_UNSIGNED_SHORT előjel nélküli 16 bites integer GL_UNSIGNED_INT előjel nélküli 32 bites integer GL_INT 32 bites integer GL_FLOAT egyszeres pontosságú lebegőpontos A type paraméter lehetséges értékei

12 12 Képek ► Kép kirajzolása:  glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels); Frame-bufferbe ír az aktuális raszterpozíciótól kezdődően width és height méretű téglalap alakú tartományt a *pixels tömbből. A pixel- fomátumnak megfelelő és adott típusú adatelemekkel dolgozik, a táblázat szerint.

13 13 Képek ► Kép kirajzolása:  glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); Frame-bufferben x,y pozíciótól width és height méretű téglalapot másol az aktuális raszterpozícióba. type: GL_COLOR, GL_RGBA, GL_DEPTH_COMPONENT, GL_STENCIL Az adattípust nem kell megadni, mert az adat ilyenkor nem másolódik a processzor memóriájába.

14 14 Nagyítás, kicsinyítés ► glPixelZoom(GLfloat zoomx, GLfloat zoomy);  zoomx, zoomy a nagyítási faktor, alapértelmezett értéke 1.  Pl. zoomx=zoomy=2 azt jelentené, hogy 1 pixel négy pixelre lenne nagyítva. image.cpp, egérrel mozgatható kép

15 15 Pixelek tárolása, transzformálása ► glPixelStore{if}(GLenum pname, TYPE param);  Pixel tárolási módok beállítása  GL_UNPACK* paraméterek azt határozzák meg, milyen formátumba kerül az adat a memóriából a frame-bufferbe.  GL_PACK* paraméterek szerepe a frame- bufferból a memóriába íráskor van. Milyen formátumban szeretnénk megkapni a frame- buffer információt.

16 16 paraméter neve típusa alapértelmezett értéke értékkészlet GL_UNPACK_SWAP_BYTESGLbooleanFALSETRUE/FALSE GL_PACK_SWAP_BYTES GL_UNPACK_LSB_FIRSTGLbooleanFALSETRUE/FALSE GL_PACK_LSB_FIRST GL_UNPACK_ROW_LENGT H GLint0 bármilyen nem- negatív egész GL_PACK_ROW_LENGTH GL_UNPACK_SKIP_ROWSGLint0 GL_PACK_SKIP_ROWS GL_UNPACK_SKIP_PIXELSGLint0 GL_PACK_SKIP_PIXELS GL_UNPACK_ALIGNMENTGLint41,2,4,8 GL_PACK_ALIGNMENT

17 17 glPixelStore* paraméterei ► *SWAP_BYTES: a byte-ok sorrendjét cseréli fel. (Akkor lehet rá szükség, ha különböző hardverek között osztunk meg adatokat.) ► *LSB_FIRST: a byte-on belüli sorrendet cseréli fel.  pl: LSB_FIRST=FALSE, 0x33 -> 0011011 LSB_FIRST=TRUE, 0x33 -> 1101100

18 18 glPixelStore* paraméterei A fenti paramétereknek a glReadPixels*(), glDrawPixels*(), glCopyPixels*() hívások esetén van hatása. Egy képen belül definiálni lehet egy kisebb téglalap alakú tartományt, de ekkor a *ROW_LEGTH szélességet meg kell adni. UNPACK és PACK esetben is ugyanez a teendő.

19 19 glPixelStore* paraméterei ► Egy 6 pixel szélességű képet szeretnénk kimenteni a memóriába. Minden pixelhez 3 byte adat tartozik (RGB). 3*6=18, tehát egy sort 18 byte határoz meg. 32 bites processzor esetén, 4 byte-onként érdemes az adatokat manipulálni, 4*5=20, tehát 2 byte-ot feleslegesen mozgatunk. ► *ALIGNMENT: Megadja, hogy hány byte-onként történjen a byte-ok kezelése  pl. *ALIGNMENT=4, akkor egy 75 bitből álló (bitmap) sor, 12 byte-on tárolódik. (75 bithez 10 byte szükséges, de négyesével olvasunk!)

20 20 Pixel-Transzfer Műveletek ► A frame-buffer folytonos komponensein (pl. RGB) affin transzformációkat lehet végrehajtani, majd tetszőleges tábla alapján (table lookup) transzformálhatóak.  glPixelTransfer{if}(GLenum pname, TYPE param); ► A pixel transzfer beállítások hatással vannak: glDrawPixels(), glReadPixels(), glCopyPixels(), glTexImage1D(), glTexImage2D(), glGetTexImage() hívásokra.

21 21 Paraméter neve típus default érték értékkészlet GL_MAP_COLORGLbooleanFALSETRUE/FALSE GL_MAP_STENCILGLbooleanFALSETRUE/FALSE GL_INDEX_SHIFTGLint0 GL_INDEX_OFFSETGLint0 GL_RED_SCALEGLfloat1.0 GL_GREEN_SCALEGLfloat1.0 GL_BLUE_SCALEGLfloat1.0 GL_ALPHA_SCALEGLfloat1.0 GL_DEPTH_SCALEGLfloat1.0 GL_RED_BIASGLfloat0 GL_GREEN_BIASGLfloat0 GL_BLUE_BIASGLfloat0 GL_ALPHA_BIASGLfloat0 GL_DEPTH_BIASGLfloat0 ),(  ),(  ),(  ),(  ),(  ),(  ),(  ),(  ),(  ),(  ),(  ),( 


Letölteni ppt "1 Pixelek, Bittérképek, Fontok, Képek. 2 Miről lesz szó? ► Bittérképek pozicionálása, rajzolása ► Pixeladatok kiolvasása, beírása a színbufferbe ► Pixeladatok."

Hasonló előadás


Google Hirdetések