Framebuffer.

Slides:



Advertisements
Hasonló előadás
ÉRDEKES PONTOK KINYERÉSE DIGITÁLIS KÉPEKEN. BEVEZETÉS  ALAPPROBLÉMA  Jellemzőpontok detektálása mindkét képen  Kinyert pontok megfeleltetése  Megfeleltetések.
Advertisements

Koordináták, függvények
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
Globális helymeghatározás Zárthelyi dolgozat Relatív helymeghatározás fázisméréssel.
GPGPU labor I. OpenGL, Cg.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Adatbázis-kezelés.
Bevezetés a Java programozásba
Függvénytranszformációk
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
Mozgó Objektumok Detektálása és Követése Robotkamera Segítségével
Programozás II. 3. Gyakorlat C++ alapok.
Mátrix függvények Keresőfüggvények
Grafika a programban Készítette: Pető László. Bevezetés Valójában nem a célobjektumra rajzolunk, hanem annak festővászon területére (canvas). Csak olyan.
Grafikus Rendszerek Zsitnyánszki Zoltán.
2006. október 2.Markó Tamás, PTE TTK1 Az Oracle SQL 5. Nézettáblák létrehozása, módosítása és törlése.
Vámossy Zoltán 2006 Gonzales-Woods, SzTE (Kató Zoltán) anyagok alapján
Operációs rendszerek gyakorlat sed, awk parancsok.
PHP I. Alapok. Mi a PHP? PHP Hypertext Preprocessor Szkriptnyelv –Egyszerű, gyors fejlesztés –Nincs fordítás (csak értelmező) Alkalmazási lehetőségek:
Access XP Kifejezés-szerkesztő Összehasonlító operátorok:
Számítógépes Grafika 2. gyakorlat Programtervező informatikus (esti) 2011/2012 őszi félév.
Számítógépes Grafika Programtervező informatikus (esti)‏ Textúrázás.
Lénárt Szabolcs Páll Boglárka
Rendezések és szövegkezelő függvények
Űrlapok.
Rendering pipeline Ogre3D
Vektorterek Definíció. Legyen V Abel-csoport, F test, továbbá
Web-grafika II (SVG) 8. gyakorlat Kereszty Gábor.
Web-grafika II (SVG) 6. gyakorlat Kereszty Gábor.
Web-grafika II (SVG) 9. gyakorlat Kereszty Gábor.
Embarcadero Rad Studio XE5 3D fények, alakzatok bemutatása
ACCESS Lekérdezések, űrlapok, jelentések
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
Számítógépes grafika I. AUTOCAD alapok
C Programozási alapok.
1. feladat  Készíts olyan függvényt, mely paraméterül kapja két egész típusú változó címét, s hívása után a két változó értéke helyet cserél.
FIR fejlesztések, változások március 17.. Új verzió változásai Márciusi verzióval új, FIR 4.1 xsd Új adatkör: o Juttatások, o Térítések.
C++2. Ciklusok elöltesztelő (for, while) A ciklusmag feldolgozása előtt történik a vizsgálat  lehet, hogy egyszer sem fut le. A soronkövetkező iteráció.
Képek, képfeldolgozás Szirmay-Kalos László.
Függvények, mutatók Csernoch Mária. Függvények függvény definíciója az értelmezési tartomány tetszőleges eleméhez hozzárendel egy értéket –függvény helyettesítési.
Képszerkesztés magas fokon
1 OpenGL grafikus rendszer Dr. Nehéz Károly egyetemi adjunktus Miskolci Egyetem Alkalmazott Informatikai Tanszék.
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.
PHP függvények MySQL adatbázisok kezelésére
Neumann János Informatikai Kar
Nyomógombok szerkesztése
a programegységek között
A grafikus hardware programozása
OpenGL 2. gyakorlat Valasek Gábor
Neumann János Informatikai Kar
Script nyelvek előadás
Vizualizáció és képszintézis
OpenGL megjelenítési listák
Készítette: Révész Lajos Bálint
Árnyékszerkesztés alapjai
Neumann János Informatikai Kar
Átlátszóság, csipkézettség, köd
Görbék, felületek.
GPGPU – CUDA 2..
Lineáris keresés Keresés (N,A,sorszam) i := 1
Képszerkesztés magas fokon
ELEMI GEOMETRIAI ISMERETEK
2. A számító- gépes grafika eszközei
Készítette: Sinkovics Ferenc
Készítette: Sinkovics Ferenc
Cache példák 2019 (IMSC).
Előadás másolata:

Framebuffer

Miről lesz szó? Milyen bufferekből áll a framebuffer? Az egyes bufferek törlése és irási engedélyek Bufferek paraméterei Egyes bufferek alkalmazásai Mintaprogramok

Framebuffer Minden buffer, egy téglalap alakú tartomány. Kétdimenziós vektor. Az adattípus a bufferen belül azonos. Az egyes bufferek eltérő adattípusokat tárolhatnak. A framebuffer a következő bufferekből áll: Szín buffer (color buffer) Mélység buffer (depth buffer) Stencil buffer Accumlation buffer

Framebuffer Az adott OpenGL implementáció függvénye az egyes bufferek mérete és pontossága. Minden OpenGL implementációnak tartalmaznia kell: 1 szín buffert (RGBA), egy hozzá tartozó mélység-, stencil és accumlation buffert. Color-index mód a mai változatokban már nem jellemző. A bufferek bithosszúságának lekérdezése: glGetIntegerv() paraméter jelentés GL_RED_BITS, GL_GREEN_BITS A bitek száma RGBA komp.szerint. GL_BLUE_BITS, GL_ALPHA_BITS GL_DEPTH_BITS A mélységbuffer (16, 32 bit) GL_STENCIL_BITS A stencilbuffer (8 bit) GL_ACCUM_RED_BITS Az accumlation buffer GL_ACCUM_GREEN_BITS RGBA komponensei GL_ACCUM_BLUE_BITS, GL_ACCUM_ALPHA_BITS

Szín bufferek Minden OpenGL implementáció tartalmaz: egy „front-left” buffert. Kiegészítő lehetőségek: GL_STEREO esetén „left” és „right” bufferek használhatóak. GL_DOUBLE_BUFFER esetén „front” és „back” buffereket használhatunk. GL_AUX_BUFFERS: kiegészítő bufferek is alkalmazhatók.

Mélység buffer Minden pixele egy mélység értéket tárol; a szemtől (vagy a szem síkjától) való távolságot. Z-buffernek is nevezik, mivel az x és y irányok a képernyő irányát jellemzik, a z irány pedig a képernyőtől mért távolságot „mélységet” jelen(the)ti.

Stencil buffer Egzakt definíció nincs, az alkalmazások alapján a működés megérthető. Legegyszerűbb alkalmazása: A színbuffer egy bizonyos részére megtiltható vele a rajzolás. A benne tárolt értékeket: pl. pixeltranszfer függvények a szín bufferbe írás a mélység bufferbe írás, stb. változtathatják.

Accumlation buffer 1 darab van belőle. RGBA komponenseket tartalmaz. Több képfázis segítségével állíthatjuk elő a végleges képet Közvetlenül nem írható. Alkalmazásai: antialiasing motion blur depth of field

Bufferek törlése Törlésértékek beállítása: Törlés glClearColor() glClearIndex() glClearDepth(float depth) glClearStencil(int s) glCrearAccum(float r, float g, float b, float a,) Törlés glClear() GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_ACCUM_BUFFER_BIT, GL_STENCIL_BUFFER_BIT

Színbufferek kiválasztása íráshoz glDrawBuffer(GLenum mode) GL_FRONT, GL_BACK, GL_RIGHT, GL_LEFT, GL_FRONT_RIGHT, GL_FRONT_LEFT, GL_BACK_RIGHT, GL_BACK_LEFT, GL_AUXi GL_FRONT_AND_BACK Megjegyzések: Több buffert is kiválaszthatunk írásra. (Különböző eredményeket is kaphatunk az eltérő alpha értéket miatt.) GL_AUXi: i = 0 .. (GL_AUX_BUFFERS-1)

Maszkolás A bufferbe írás előtt maszkolással eldönthető, hogy történjen-e írás: glIndexMask(GLuint mask) glColorMask(GLboolean r, GLboolean g, GLboolean b, GLboolean alpha) glDepthMask(GLBoolean flag) glStencilMask(GLuint mask) ColorIndex és Stencil Mask esetén bitenkénti ÉS művelet hajtódik végre a paraméter értéke és az aktuális pixel között. Beállítható melyik bitplane írható. Depth buffer esetén. GL_TRUE írható, GL_FALSE nem írható buffert állít be. Color Buffer estén az egyes színkomponensek kölön-külön is írhatóak.

Buffertesztek Scissor test Alpha test Stencil test Depth test

Scissor test glScissor(GLint x, GLint y, GLsizei width, GLsizei height); glEnable(GL_SCISSOR) után a x,y,width,height által megadott téglalapba nem történik rajzolás A stencil buffer segítségével is ugyanez az eredmény érhető el. A scissoring gyorsabb. Alkalmazása: a felülírás megakadályozása a képernyő egy téglalap alakú tartományában.

Alpha test Az alpha érték segítségével szabályozhatjuk a színbufferbe való írást. Bekapcsolása: glEnable(GL_ALPHA_TEST); glAlphaFunc(GLenum func, GLclampf ref); paraméter érték GL_NEVER nem történik írás GL_ALWAYS teszt nélkül, mindig történik írás GL_LESS frag. < ref GL_LEQUAL frag. <= ref GL_EQUAL frag. = ref GL_GEQUAL frag. >= ref GL_GREATER frag. > ref GL_NOTEQUAL frag. != ref

Alpha test Alkalmazás: Pl: Átlátszóság: kétszer kell kirajzolni a képkockát, először azokat az értékeket fogadva el, amelyeknél alpha=1, majd másodszorra ahol alpha != 1. A depth test mindkét esetben működik, de a második alkalommal a depth buffert read-only-ra kell beállítani. Textúrázás, decal mód. Átlátszó textúrákat lehet létrehozni. Ahol átlátszó a textúra, ott alpha=1, ahol nem, ott alpha=0.5, és Ref=0.5. E meleltt az alpha test: GL_GREATHER.

Stencil test A stencilezésnél a referencia érték és a stencil bufferben tárolt érték között történik összehasonlítás. A teszt eredményétől függően módosul a stencil buffer. glStencilFunc(GLenum func, Glint ref, GLunib mask); func: GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, GL_NOTEQUAL Ha GL_LESS, akkor ha ref < stencil, akkor mask&ref és mask&stencil. Alapértelmezetten: func=GL_ALWAYS, ref=0, mask=255 így a stencilezés kikapcsolva van.

Stencil test glStencilOp(GLenum fail, GLenum zfail, GLenum zpass); Hogyan változik a stencil buffer, ha a stencil test igaz vagy hamis, vagy a zbuffer teszt igaz, vagy hamis. Mindhárom paraméter a következő értékeket veheti fel: GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, GL_INVERT. GL_KEEP: az érték megtartása GL_ZERO: kicseréli nullára GL_REPLACE: a referencia értékkel cseréli ki GL_INCR, GL_DECR: növeli, csökkenti GL_INVERT: invertálja Alapértelmezett értékek: GL_KEEP, GL_KEEP, GL_KEEP. Tehát minden esetben megtartja a stencil bufferben tárolt értéket

Stencil példa A legegyszerűbb alkalmazás: rajzoláskor tetszőleges tartomány figyelmen kívül hagyásával: A stencil buffer feltöltése 0-val. Az alakzat kirajzolása, stencli = 1-el. glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); Ne rajzoljon oda ahol a stencil=1, glStencilFunc (GL_NOTEQUAL, 0x1, 0x1); Példa forrás: stencil/stencil.c

Accumlation buffer Nem lehet közvetlenül írni az accumlation bufferbe. A kép fázisait lehet „akkumlálni”, majd az eredmény visszaírni a színbufferbe. Ez természetesen lassabb, mint egyszer írni a színbufferbe. Az akkumlációs bufferben képfázisok megőrzésére is mód nyílik. Alkalmazása: antialiasing, motion blur, depth of field effects

Accumlation buffer glAccum(GLenum op, GLfloat value); op: GL_ACCUM, GL_LOAD, GL_RETURN, GL_ADD, GL_MULT GL_ACCUM: R,G,B,A komponenseket szorozza a value –vel, majd az eredményt az akkumlációs bufferhez adja. GL_LOAD: ugyanaz mint az előző, de nem adja hozzá, hanem felülírja az akkumlációs buffert. GL_RETURN: az akkumlációs buffer tartalma visszaíródik a színbufferbe. GL_ADD, GL_MULT: a value-t hozzáadja, vagy vele megszorozza az akkumlációs buffer tartalmát. Az eredmény ugyancsak az akkumlációs bufferben lesz.

Példa: Scene antialiasing Lépések: Akkumlációs buffer törlése A front buffer bekapcsolása N szer rajzoljuk ki a képet eltérő pozíciókban, eltérő értékekkel: glAccum(GL_ACCUM, 1.0 / N); // (1.0/N)=const Az utolsó lépésben kapjuk vissza az eredményt: glAccum(GL_RETURN, 1.0); Megjegyzés: ha nem akarjuk, hogy a köztes fázisok látszanak, akkor rendeleljünk a hátsó bufferbe.

Példa: accanti.c (ortogonális) A jitter.h előre definiálja az eltolások tömbjét, amit a glTranslate()-ben alkalmazunk. Feladat: próbáljuk ki valamelyik más jitter értéket: 2,3,4,8,24,66 alkalmazni a for() ciklusban.

Példa: accpersp.c (perspektívikus) accFrustum(): első 6 paraméter megfelel a glFrustum() paramétereinek. pixdx, pixdy: antialias eltolások pixelben eyedx,eyedy: a nézőpont eltolás a depth of field hatásnál focus: >0 Elemezzük az accPerspective()-t!

Motion blur motionblur.cpp

Depth of field Dof.c

Árnyék teapot.c