Content extract
Grafikus csővezeték és az OpenGL függvénykönyvtár 1 / 32 A grafikus csővezeték 3D-s színtér objektumainak leírása primitívekkel: pontok, élek, poligonok. Primitívek szögpontjait vertexeknek nevezzük Adott sorrendben végrehajtott műveletek segítségével áll elő a 2D-s kép Műveletek sorrendjét grafikus csővezetéknek nevezzük Rögzített műveleti sorrendű grafikus csővezeték Programozható grafikus csővezeték 2 / 32 Rögzített műveleti sorrendű grafikus csővezeték 3 / 32 Rögzített műveleti sorrendű grafikus csővezeték Vertex kapcsolódások Vertexek Vertex transzformáció Transzformált vertexek Primitív összerakás és raszterizálás Pixel pozíciók Fragmensek Fragmens textúrázás és színezés Raszter műveletek Színezett fragmensek Pixel frissítések 4 / 32 Rögzített műveleti sorrendű grafikus csővezeték Vertex transzformációk Matematikai műveletek sorozata Primitívek szögpontjainak
meghatározása a képernyőn Vertex attribútumok átadása Színezett vertex vertex transzformáció után Primitív összerakás Raszterizálás Interpoláció, textúrázás és színezés 5 / 32 Rögzített műveleti sorrendű grafikus csővezeték Primitív összerakás és raszterizálás A vertexek primitívekbe vannak szervezve kapcsolódási információk alapján Vágás A 3D-s színtér látható térfogata Alkalmazás által definiált vágósíkok Raszterizáló eldobhat poligonokat Geometriai primitívek lefedése Fragmensek 6 / 32 Rögzített műveleti sorrendű grafikus csővezeték Fragmens textúrázás és színezés Mindegyik fragmensre textúrázás és matematikai műveletek végrehajtása Transzformált vertexekből származó interpolált szín Interpolált textúra koordináták Fragmenshez tartozó texel kinyerése Fragmens szín 7 / 32 Rögzített műveleti sorrendű grafikus csővezeték Raszterműveletek Fragmens és kapcsolódó
adatok Pixeltulajdonteszt Olló teszt Mélység teszt Mélység puffer Keveredés Alfa teszt Stencil teszt Stencil puffer Dithering Logikai művelet Szín puffer 8 / 32 Rögzített műveleti sorrendű grafikus csővezeték Raszterműveletek Pixeltulajdon-teszt Képernyő adott pixelére írhatunk-e Olló teszt Olló téglalapra korlátozott kirajzolás Alfa teszt Fragmens alfa értékének összehasonlítása egy előre megadott értékkel Adott reláció mellett kapott hamis értéknél a fragmens eldobódik 9 / 32 Rögzített műveleti sorrendű grafikus csővezeték Raszterműveletek Stencil-teszt Fragmens pozíciójának megfelelő stencilpuffer érték összehasonlítása egy előre megadott értékkel Ha az összehasonlítás eredménye hamis, akkor a fragmens eldobódik Stencilpuffer értékének módosítása Műveletek megadása sikeres és sikertelen stencil teszt esetén Sikeres stencil teszt és a mélység teszttől függő művelet megadása 10
/ 32 Rögzített műveleti sorrendű grafikus csővezeték Raszterműveletek Mélység teszt Fragmens mélység értékének összehasonlítása a mélységpufferben levő értékkel Sikeres teszt esetén frissül a színpuffer és a mélységpuffer Alap esetben a nézőponthoz közelebbi fragmens fog bekerülni a színpufferbe 11 / 32 Rögzített műveleti sorrendű grafikus csővezeték Raszterműveletek Keveredés: végső fragmens és pixelek egyesítése Dithering: a színmélység javítása a térbeli felbontás rovására Logikai műveletek: OR, XOR vagy INVERT Fragmens és kapcsolódó adatok Pixeltulajdonteszt Olló teszt Mélység teszt Mélység puffer Keveredés Alfa teszt Stencil teszt Stencil puffer Dithering Logikai művelet Szín puffer 12 / 32 Programozható grafikus csővezeték 13 / 32 Programozható grafikus csővezeték 3D-s alkalmazás vagy játék 3D-s API parancsok 3D-s API: OpenGL vagy Direct3D CPU - GPU határvonal GPU
parancs és adat folyam Vertex index folyam GPU kapcsolódás Összerakott primitívek Primitív összerakás Pixel pozíció folyam Raszterizálás és interpolálás Pixel frissítések Raszter műveletek Transzformált fragmensek Transzformált vertexek Előtranszformált vertexek Programozható vertexproc. Raszterizált előtranszformált fragmensek Frame puffer Programozható fragmensproc. 14 / 32 Programozható grafikus csővezeték Programozható vertex processzor Vertex attribútumok betöltése a megfelelő regiszterekbe Vektorokon végzett matematikai műveletek Fejlettebb vertex processzorok a vezérlési szerkezeteket is támogatják Programozható fragmens processzor Hasonló műveletek végrehajtása, mint a vertex processzorok esetén A fragmens processzorok támogatják a textúra műveleteket is 15 / 32 Programozható grafikus csővezeték Programozható vertex processzor Begin Vertex atribútumok másolása a bemeneti regiszterekbe Vertex
program utasítás memória A következő utasítás betöltése és dekódolása A bemeneti és/vagy ideiglenes regiszterek olvasása Bemeneti regiszterek Input értékek leképezése Ideiglenes regiszterek Vertex program utasítás ciklus Műveletek végrehajtása Igen Ideiglenes vagy kimeneti regiszterek írása maszkolással Van több utasítás? Nem Kimeneti regiszterek A kimeneti regiszter transzformált vertexként való kibocsátása End 16 / 32 Programozható grafikus csővezeték Programozható fragmens processzor Begin Paraméterek inicializálása Interpolált primitívek Fragmens program utasítás memória A következő utasítás betöltése és dekódolása Interpoláltak és/vagy ideiglenes regiszterek olvasása Ideiglenes regiszterek Input értékek leképezése Textúra címek kiszámítása & részletek szintjei & texelek betöltése Textúra képek Igen Textúra beolvasási utasítás? Nem Műveletek végrehajtása Fragmens
program utasítás ciklus Igen Texel szűrők Ideiglenes vagy kimeneti regiszterek írása maszkolással Van több utasítás? Nem Kimeneti mélység és szín A végső fragmens kibocsátása End 17 / 32 OpenGL függvénykönyvtár 18 / 32 OpenGL függvénykönyvtár Hordozható, 3D-s grafikus függvénykönyvtár Több száz függvényt és definíciót tartalmaz Egy színtér leírásához OpenGL függvény hívások sorozatát kell megadni Vertex OpenGL primitívek szögpontjai 2D-s és 3D-s pozíciók Meghatározzák a primitív alakját és helyzetét 19 / 32 OpenGL függvénykönyvtár v6 v4 v4 v3 v1 v3 v5 v5 v1 v2 Pontok v0 v3 v5 v1 v2 Vonalak v4 v4 v0 v0 v0 v3 v5 v1 v2 Vonal hurok v2 Töredezett vonal v5 v0 v3 v0 v5 v1 v2 v4 v3 v5 v4 v1 Háromszögek v2 v0 v1 v2 Háromszög-legyező v5 v5 v6 v1 v4 Háromszögsáv v5 v7 v3 v1 v3 v0 v4 v0 v3 v3 v2 v4 Négyszögek v7 v0 v2 v4 Négyszögsáv v6 v1 v2
Poligon 20 / 32 OpenGL függvénykönyvtár Az OpenGL függvénykönyvtár támogatja a Megvilágítást Árnyalást Textúrázást Keveredést Átlátszóságot Más speciális hatásokat és képességeket Az OpenGL függvénykönyvtár nem tartalmaz Ablakkezelő függvényeket Felhasználói interaktivitást és I/O műveleteket végrehajtó függvényeket Nincs OpenGL file formátum A modellek tárolására A virtuális színtér tárolására 21 / 32 OpenGL függvénykönyvtár Adattípusok és függvényelnevezési szabályok OpenGL adattípus Belső reprezentáció C adattípusként definiálva GLbyte 8 bites egész signed char GLshort 16 bites egész short GLint, GLsizei 32 bites egész long GLfloat 32 bites lebegőpontos float GLclampf pont GLuint, GLenum, GLbitfield 32 bites előjel nélküli egész unsigned long <Könyvtár prefix><Alap parancs><Opcionális argumentum szám><Opcionális argumentum típus> gl Color 3 f glColor3f(0.5, 05,
05); 22 / 32 OpenGL függvénykönyvtár Platformfüggetlenség Operációs rendszerekhez kapcsolódó feladatok Ablakkezelés Felhasználói interakciók kezelése Felhasználó leütötte-e az Enter billentyűt? GLUT használata Kezdetekben AUX (auxiliary) lib Kereszt-platformos példák szemléltetése Pop-up menük, ablakok, joystick támogatás, stb. GUI programozása adott platformon 23 / 32 OpenGL függvénykönyvtár Első program #i n c l u d e <GL/ g l u t . h> // a s z í n t é r r a j z o l á s a void RenderScene ( void ) { // Az a k t u á l i s t ö r l ő s z í n n e l v a l ó a b l a k t ö r l é s g l C l e a r (GL COLOR BUFFER BIT) ; // F l u s h r a j z o l ó p a r a n c s glFlush () ; } // A r e n d e r e l é s i á l l a p o t o k b e á l l í t á s a v o i d SetupRC ( v o i d ) { //A s z í n p u f f e r t ö r l ő s z í n é n e k a b e á l l í t á s a glClearColor (0.0 f , 00 f , 10 f , 10 f ) ; } 24 / 32 OpenGL
függvénykönyvtár Első program // A program b e l é p é s i p o n t j a i n t main ( i n t a r g c , char ∗ a r g v [ ] ) { g l u t I n i t (& a r g c , a r g v ) ; g l u t I n i t D i s p l a y M o d e (GLUT SINGLE | GLUT RGBA) ; glutCreateWindow ( " Egyszeru " ) ; g l u t D i s p l a y F u n c ( RenderScene ) ; SetupRC ( ) ; glutMainLoop () ; return 0; } 25 / 32 OpenGL függvénykönyvtár Első program - main függvény g l u t I n i t (& a r g c , a r g v ) ; Továbbítja a parancssori paramétereket Inicializálja a GLUT függvénykönyvtárat g l u t I n i t D i s p l a y M o d e (GLUT SINGLE | GLUT RGBA) ; Egyszeresen pufferelt ablak RGBA színmód 26 / 32 OpenGL függvénykönyvtár Első program - main függvény glutCreateWindow ( " Egyszeru " ) ; Ablak létrehozása Címsorában az "Egyszeru" felirat g l u t D i s p l a y F u n c ( RenderScene ) ; RenderScene callback függvény regisztrálása Ablak
újrarajzolása Ablak első megjelenítésekor Ablak előtérbe helyezésekor OpenGL renderelési függvények hívása 27 / 32 OpenGL függvénykönyvtár Első program - main függvény SetupRC ( ) ; Renderelése előtti inicializálás OpenGL állapotok beállítása glutMainLoop () ; GLUT eseménykezelő elindítása Vezérlés átadása a GLUT-nak Fő ablak bezárásig nem tér vissza Üzenetek feldolgozása 28 / 32 OpenGL függvénykönyvtár Első program - SetupRC függvény glClearColor (0.0 f , 00 f , 10 f , 10 f ) ; Ablak törlésére használt szín megadása A színpuffer inicializálására használt szín beállítása v o i d g l C l e a r C o l o r ( GLclampf red , GLclampf g r e e n , GLclampf b l u e , GLclampf a l p h a ) ; GLclampf: 0 és 1 közé leképezett float A szín vörös, zöld és kék összetevők keverékeként való megadása alpha: keveredés és speciális hatások 29 / 32 OpenGL függvénykönyvtár Első program -
RenderScene függvény g l C l e a r (GL COLOR BUFFER BIT) ; A színpuffer törlése Pufferek törlése glFlush () ; OpenGL parancssor ürítése Nem vár további utasításokra Beérkezett utasítások feldolgozásának folytatása 30 / 32 Összefoglalás Grafikus csővezeték Műveletek meghatározott sorrendje Adatok áramlása egyik fázisból a másikba Meghatározott típusú be- és kimenő adatok SIMD Programozható grafikus csővezeték Rögzített műveleti sorrendű grafikus csővezeték „kiegészítése” Programozható vertex és fragmens processzor 31 / 32 Összefoglalás OpenGL függvénykönyvtár 3D-s grafikus függvénykönyvtár Színtér leírása függvények meghívásával Rögzített műveleti sorrendű grafikus csővezeték GLUT Első program 32 / 32