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  v3  v5  v5  v0 v3  v5  v2  v1  Pontok  Vonalak  v1  v1  v2  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