Bevezetés a számítógépi grafikába
Történelem 1963: Ivan Sutherland – Sketchpad első GUI (Graphical User Interface) 1964: IBM és GM – első CAD (Computer Aided Design) rendszer grafikus konzol, grafikus parancsok, fényceruza 1965: első egér (fából és műanyagból) 1974: Sharp kifejleszti az LCD megjelenítőt 1980: PC-k elterjedése raszter grafikával
A grafika hardvere Input eszközök Output eszközök billentyűzet egér fényceruza emberi ujj (touch-screen) scanner jellemzők: lapméret, felbontás (DPI – Dot Per Inch), színmélység Output eszközök nyomtató monitor projektor stb.
Output eszközök - Hardcopy perifériák Rajzgépek: mérnöki munkáknál Nyomtatók mátrix nyomtatók tintasugaras nyomtatók lézernyomtatók jellemzőik: nyomtatható méret rajzolási sebesség felbontás (DPI) színes vagy fekete-fehér
Output eszközök - Megjelenítők Emissziós: saját fényűek Nem emissziós: más fényforrást használók
Output eszközök - Megjelenítők Emissziós CRT (Cathode Ray Tube) katódsugár elektronsugara foszfort gerjeszt folyamatos frissítés Nem emissziós LCD (Liquid Crystal Display) folyadékkristályok állapotváltozása TFT-LCD (Thin-film Transistor) rácspontokban tranzisztorok Plazma képernyő üveglapok közötti rács nemesgázzal töltve
Output eszközök - Megjelenítők Monitorok és vezérlőkártyák jellemzői: Képátmérő (17’’, 21’’ stb.) Felbontás (640x480, 1024x768, 1600x1200 stb.) Színmélység: hány biten tárolunk egy pixelt 1 bit = 2 szín (monokróm) 2 bit = 4 szín 4 bit = 24 = 16 szín 8 bit = 28 = 256 szín 24 bit = 224 ≈ 16 millió szín (True Color – RGB)
Output eszközök - Megjelenítők Monitorok és vezérlőkártyák jellemzői: Képernyő lapok száma Képfrissítési frekvencia > 60 Hz Sebesség GPU: grafikus processzor Grafikus memória Felbontás 16 szín (4 bit) 256 szín (8 bit) 16 M szín (24 bit) 320x200 64000*0.5 = 32000 byte 64000 byte 192000 byte 640x480 307200 byte 921600 byte ≈ 1 Mbyte 1024x780 480000 byte ≈ 2.5 Mbyte 1600x1200 ≈ 6 Mbyte
Output eszközök - Megjelenítők Monitorok és vezérlőkártyák típusok: 1980 – CGA: 320x200 – 4 szín, 640x200 – 2 szín 1984 – MDA/Hercules: 720x348 – 2 szín 1984 – EGA: 640x350 – 16 szín 1987 – VGA: 640x480 – 16 szín, 320x200 – 256 szín 1990 – SVGA, VESA szabvány: 800x600 – 32K szín 1280x1024 – 16M szín XGA …
A grafika szoftvere – 4 fő terület Generatív grafikus adatfeldolgozás képek és grafikus adatok bevitele síkbeli és térbeli objektumok modellezése Grafikus adatok (képek) tárolása Képmanipuláció Mintafelismerés képekből meghatározott információk kinyerése Modell Számítógépen megjelenő kép Képfeldolgozás Képtárolás Generatív adatfeldolgozás Mintafelismerés
Generatív adatfeldolgozás Számítógéppel segített tervezés CAD (Computer Aided Design) CAM (Computer Aided Manufactoring) Bemutató és üzleti grafika diagramok, hisztogramok prezentációkészítők Tudományos és műszaki szimuláció költséges vagy lehetetlen vizsgálatok szemléltetése
Generatív adatfeldolgozás Művészet és animáció Virtuális valóság Számítógépes játékok
Mintafelismerés Ujjlenyomat felismerés Arcfelismerés Orvosi képfeldolgozás: CT (Computed Tomography) MRI (Magnetic Resonance Imaging) ultrahang digitális radiológia OCR (Optical Character Recognition)
Képtárolás, képkódolás Tárolás valamilyen kódolt formában. Kódolási eljárások: Huffman kód RLE kód LZW kód stb.
Huffman kódolás Színértékek cseréje rövidebb kódokra Előfordulási valószínűségek alapján Egy fát konstruálunk a kódolás során: csúcsai a kódolandó elemek élei 0 és 1 címkéjűek Hatékony tömörítés szövegek esetén akár 50%-os
RLE kódolás Ismétlődésen alapul Az egymást követő jelek sorozatát kódoljuk, pl: input: 0000033000344 (13 byte) output: 5023301324 (10 byte)
Képformátumok BMP JPEG GIF, TIFF alapvető Windows-os képformátum RLE kódolás – kis képek tárolására JPEG fotórealisztikus képek tárolására legelterjedtebb a weben 8x8-as blokkok kódolása veszteséges tömörítésként is GIF, TIFF
Mozgókép formátumok MPEG AVI, MOV, WMV GIF JPEG képeket tartalmaz egymás utáni képek közötti különbségeket kódolja AVI, MOV, WMV GIF animált GIF
Raszteres grafika Alapeleme a képpont (pixel) A kép egy pixelekből álló rács Előnye: általánosan és könnyen használható Hátránya: nagy képméret nem skálázható mintafelismerésre nem nagyon alkalmas
Vektorgrafika A képet primitív alakzatokkal írjuk le Előnye: Hátránya: vonalak, görbék, síkidomok színnel/mintával kitöltött területek 3D-ben: testek Előnye: skálázható mintafelismerésre alkalmasabb Hátránya: nem általános
Alapvető raszteres algoritmusok Folytonos geometriai alakzatok képpontokkal való közelítése szakasz kör ellipszis görbék stb.
Szakasz rajzolása – DDA y=mx+b alakú egyenletből indulunk ki m=dy/dx dx: mennyit lépünk az x tengelyen dy: mennyit lépünk az y tengelyen Optimalizálás: legyen Max(dx,dy)=1
Szakasz rajzolása – DDA procedure DDA(x1,y1,x2,y2,color:integer); hossz:=abs(x2-x1); if (abs(y2-y1)>hossz) then hossz:=abs(y2-y1); dx:=(x2-x1)/hossz; dy:=(y2-y1)/hossz; x:=x1; y=:y1; putpixel(trunc(x),trunc(y),color); for i:=1 to hossz do begin x:=x+dx; y:=y+dy; end;
Szakasz rajzolása – Midpoint Javítja a DDA kerekítési hibáit Feltesszük, hogy 0≤m≤1: dx=1, 0≤dy≤1
Szakasz rajzolása – Midpoint P után az NE vagy az E pontot gyújtsuk ki? Legyen: dp=F(xp+1,yp+0.5) Ha dp≥0 E Ha dp<0 NE
Szakasz rajzolása – Midpoint Az F(x,y)=Ax+By+C egyenletet használjuk: d1 = F(x1+1,y1+0.5) = F(x1,y1)+ A+B/2 Mivel F(x1,y1)=0, így d1=A+B/2
Szakasz rajzolása – Midpoint Ha E-t gyújtottuk ki az (xp+1,yp+1) pontban: dp+1=F(xp+2, yp+0.5) =A·(xp+2) + B·(yp+0.5) + C =F(xp+1, yp+0.5) + A = dp+A ΔE = A Ha NE-t gyújtottuk ki az (xp+1,yp+1) pontban: dp+1 =F(xp+2, yp+1.5) =A·(xp+2) + B·(yp+1.5) + C =F(xp+1, yp+0.5) + A+B = dp+A+B ΔNE = A+B
Szakasz rajzolása – Midpoint d1=A+B/2 ΔE = A ΔNE = A+B Legyen: F(x,y) = 2(Ax+By+C) d1=2A+B ΔE = 2A ΔNE = 2(A+B)
Szakasz rajzolása – Midpoint procedure MPL(x1,y1,x2,y2,color:integer); A:=y1-y2; B:=x2-x1; d:=2*A+B; dE:=2*A; dNE:=2*(A+B); x:=x1; y=:y1; putpixel(x,y,color); while x<x2 do begin if (d<0) then begin d:=d+dNE; y:=y+1; end; else d:=d+dE; x:=x+1;
Szakasz rajzolása – Midpoint Az algoritmus teljessé tehető: 8 eset: x/y növelése/csökkentése dx/dy szerepe
Kör rajzolása – Midpoint 8-as szimmetria Origó középpont Legyen: dp=F(xp+1,yp-0.5) Ha dp<0 E Ha dp≥0 SE
Kör rajzolása – Midpoint Az F(x,y)=x2+y2-r2 egyenletet használjuk: d1 = F(1,r-0.5) =1+r2-r+0.25-r2 = 1.25-r ≈ 1-r
Kör rajzolása – Midpoint Ha E-t gyújtottuk ki az xp+1 pontban: dp+1=F(xp+2, yp-0.5) =F(xp+1, yp-0.5) + 2xp+3 = dp+2xp+3 ΔE = 2xp+3 Ha SE-t gyújtottuk ki az xp+1 pontban: dp+1=F(xp+2, yp-1.5) =F(xp+1, yp-0.5) + 2xp+3 - 2yp+2 =dp+ 2(xp-yp )+5 ΔSE = 2(xp-yp )+5
Kör rajzolása – Midpoint procedure MPC(u,v,r,color:integer); d:=1-r; x:=0; y=:r; putpixel(u+x,v+y,color); while y>x do begin if (d<0) then d:=d+2*x+3; else begin d:=d+2*(x-y)+5; y:=y-1; end; x:=x+1; procedure CirclePoints(u,v,x,y,color); begin putpixel(u+x,v+y,color); putpixel(u+x,v-y,color); putpixel(u+y,v+x,color); putpixel(u+y,v-x,color); putpixel(u-x,v+y,color); putpixel(u-x,v-y,color); putpixel(u-y,v+x,color); putpixel(u-y,v-x,color); end;
Kör rajzolása – Midpoint
Window-Viewport transzformáció Világkoordináta-rendszer a felhasználó ebben adja, illetve kapja a geometriai információkat Eszközkoordináta-rendszer hardvernek megfelelő, specifikus
Window-Viewport transzformáció Követelmények: A window határpontjait a viewport határpontjaiba transzformáljuk. Egyenestartó leképezés. A leképezés lineáris wx=wxmin+a·(wxmax-wxmin) vx=vxmin+a·(vxmax-vxmin) ahol 0 ≤ a ≤ 1
Window-Viewport transzformáció
Window-Viewport transzformáció
Cohen-Sutherland algoritmus szakasz vágása téglalapra (képernyőre) sík 9 részre osztása minden ponthoz 4 bites kód 1. bit: balra a baloldali képernyőéltől 2. bit: jobbra a jobboldali képernyőéltől 3. bit: az alsó képernyőél alatt 4. bit: a felső képernyőél felett
Cohen-Sutherland algoritmus Ha a két kód csupa 0, akkor a szakasz a képernyőn van. Ha van olyan helyiértékű bit, mely mind a két kódban 1, akkor a szakasz nincs a képernyőn. csak az egyik kódban 1, akkor: a helyiértének megfelelő képernyőéllel el kell metszeni a szakaszt, és a metszéspontra módosítani a szakasz végpontját (és a kódját kiszámolni).
Ponttranszformációk Eltolás Skálázás Tükrözés x-tengelyre
Ponttranszformációk Tükrözés y-tengelyre Forgatás origó körül
Homogén koordináták 2D-s pontok számhármasokként Egymással arányos hármasok ugyanazt a pontot reprezentálják [x1, x2, x3] ~ [ωx1, ωx2, ωx3] , ahol ω0 valós szám pl. [1,2,-2] ~ [-2,-4,4] kikötés: x30 Áttérés homogén koordinátákra: [x,y] [x,y,1] Visszatérés Descartes koordinátákra: [x1, x2, x3] [x1/ x3, x2/x3]
Homogén koordináták Homogén koordináták felhasználásával: p’=M·p , ahol M 3x3-as mátrix Skálázás
Homogén koordináták Forgatás origó körül Eltolás
Homogén koordináták Window-Viewport transzformáció eltolás az origóba skálázás eltolás a viewport alsó sarkába
Homogén koordináták Eltolás az origóba Skálázás
Homogén koordináták Eltolás az origóba + skálázás Eltolás a viewport alsó sarkába
Homogén koordináták Window-Viewport transzformáció
Homogén koordináták 3D-ben 3D-s pontok számnégyesekként Skálázás
Homogén koordináták 3D-ben Eltolás Forgatás x tengely körül
Homogén koordináták 3D-ben Forgatás y tengely körül Forgatás z tengely körül