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
gl Color 3 f glColor3f(0.5, 0.5, 0.5);
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 // 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 , 0.0 f , 1.0 f , 1.0 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 , 0.0 f , 1.0 f , 1.0 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 re d , 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