OpenGL 2. gyakorlat Hapák József

Slides:



Advertisements
Hasonló előadás
Számítógép grafika.
Advertisements

Geometriai transzformációk
KAPOSVÁRI EGYETEM CSOKONAI VITÉZ MIHÁLY PEDAGÓGIAI FŐI S KOLAI FŐI S KOLAI KAR.
Geometriai Transzformációk
GPU Szirmay-Kalos László.
Számítógépes grafika és képfeldolgozás
Számítógépes grafika Szirmay-Kalos László
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
Számítógépes Grafika 6. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
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.
Másodfokú egyenletek.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Mérnöki objektumok leírása és elemzése virtuális terekben c. tantárgy Budapesti Műszaki Főiskola Neumann János Informatikai Kar Intelligens Mérnöki Rendszerek.
Dr. Horváth László – PLM – CCM – 2. előadás: Határfelület-ábrázolás és Euler -i topológia A CAD/CAM modellezés alapjai Dr. Horváth László Budapesti.
A lineáris függvény NULLAHELYE
Számítógépes grafika OpenGL 1. gyakorlat.
Számítógépes Hálózatok GY
A 4D stúdió valós idejű GPU-s implementálása Hapák József ELTE-IK MSC 2012.
FTP File Transfer Protocol. Mi az FTP? Az FTP egy olyan protokoll, amely fájlok interneten keresztül végzett átvitelére szolgál. A felhasználók többsége.
Számítógépes Grafika 2. gyakorlat Programtervező informatikus (esti) 2011/2012 őszi félév.
Számítógépes grafika 3. gyakorlat.
Bevezetés: a Számítógépi grafika tárgya (Szemelvények: amit tudni illik)
Bevezetés a Számítógépi grafikába - előadás
Számítástechnikai szoftver üzemeltető
Számítógépes grafika 5. gyakorlat. Előző órán Textúrázási módok Pixel shader használata.
Számítógépes Grafika Programtervező informatikus (esti)‏ Textúrázás.
Bevezetés az alakmodellezésbe I. Budapesti Műszaki Főiskola Neumann János Informatikai Főiskolai Kar A Műszaki Tervezés Rendszerei 2000/2001 tanév, I.
Számítógépes grafika Bevezetés
Rendering pipeline Ogre3D
1 Példa. 2 Észrevételek 1. G i következő tulajdonságai invariánsak a direkt szorzat képzésre: asszociativitás, kommutativitás, egységelem létezése, invertálhatóság.
Számítógépes grafika DirectX 5. gyakorlat. Emlékeztető Háromdimenziós alapok befejezése Textúrázás.
GPU ELTE IK Számítógépes Grafika II. Jeni László Attila
OpenGL 4 shaderek, GLSL Valasek Gábor
GPGPU A grafikus hardver általános célú felhasználása
Bevezetés: a Számítógépi grafika tárgya (Szemelvények: amit tudni illik)
Brightr Megvilágítás modellezése. Csapattagok  Illés László  Palatinus Endre  Provits Milán  Török Péter.
Fejlett grafikai algoritmusok Megvilágítás SZTE, 2010.
Alapfogalmak, módszerek, szoftverek
Mérnöki tervezés december Hangelemző rendszer fejlesztése Symbian OS-re Hegedűs Iván Mihály Pázmány Péter Katolikus Egyetem Információs Technológiai.
ProgramozásProgramozás célja hosszabb számítások elvégzése ill. kiíratása akkor érdemes programot írni, ha sok számolni való van illetve ha ugyanazt az.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Számítógépes grafika I. AUTOCAD alapok
Informatikai eszközök a virtuális valóság szolgálatában Hapák József ELTE-IK X. Eötvös Konferencia.
Számítógépes grafika OpenGL 5. gyakorlat.
Intelligens Mérnöki Rendszerek Laboratórium Alkalmazott Matematikai Intézet, Neumann János Informatikai Kar, Óbudai Egyetem Mielőtt a virtuális térbe lépnénk.
4. A grafikus szerelőszalag - áttekintés 4.0. Bevezetés.
Számítógépes Grafika OpenGL 4 shaderek, GLSL. OpenGL 4 A következő programozható fázisok vannak a 4.x-es OpenGL-ben: Vertex shader Tesselation control.
A számítógépes grafika alapjai, PPKE-ITK, Benedek Csaba, 2010 Tanagyag forrás © Szirmay-Kalos László, BME A számítógépes grafika céljai és feladatai 1.
Számítógépes Grafika 3. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Képek, képfeldolgozás Szirmay-Kalos László.
GeoGebra Dinamikus matematika mindenkinek
GeoGebra Dinamikus matematika mindenkinek
Grafikus szoftver Szirmay-Kalos László. Interaktív programok felépítése input csővezeték output csővezeték.
Bemutatkozás Magdics Milán Született: Budapest, augusztus 30.
OpenCV CV = Computer Vision
SZÁMÍTÓGÉPES GRAFIKA 1. gyakorlat. Elérhetőségek Honlap: lunyi.web.elte.hu Egyéb lehetőségek: – Megkeresés.
EKF Comenius Kar, Sárospatak Dr. Kelemen Judit dékán.
Számítógépes szimuláció Első előadás Gräff József.
Bevezetés.  Miért …  … egyszálúan programozunk?  … probléma ez?  Hogyan …  … változik ez?  … tudjuk kihasználni?  Megéri-e párhuzamosítani?
Számítógépes Grafika OpenGL és SDL alapok
3D grafika összefoglalás
Számítógépes szimuláció
OpenGL 2. gyakorlat Valasek Gábor
Vizualizáció és képszintézis
OpenGL IV.
Matematika I. BGRMA1GNNC, BGRMA1GNNB előadás.
Bevezetés Tematika Számonkérés Irodalom
Bevezetés GPGPU Alkalmazások.
A számítógép működésének alapjai
A lineáris függvény NULLAHELYE
Előadás másolata:

OpenGL 2. gyakorlat Hapák József Számítógépes Grafika gyakorlatok Programtervező Informatikus (Nappali) A, C, T szakirányok OpenGL 2. gyakorlat Hapák József

Emlékeztető Múlt órán a Windows-os alkalmazásokat tekintettük át Továbbá láttuk, hogy programjainak szüksége van Egy ablakra, amibe rajzolhatunk Egy ún. OpenGL context-re, amin keresztül rajzolunk az ablakra Illetve a kettő összekapcsolására, amit a WinAPI segítségével végeztünk (más-más ablakozórendszereknél más-más API/függvényeken-n keresztül történik ez)

Most következik Mi a grafikus szerelőszalag/grafikus csővezeték/pipeline Geometria tárolása és kirajzolása Shaderek használata

Grafikus szerelőszalag

Grafikus szerelőszalag Az alkalmazásaink célja a színterünk kirajzolása A kép előállítása során használt műveletek sorozatát hívjuk grafikus szerelőszalagnak (grafikus csővezeték, graphics pipeline) A színterünket benépesítő geometriai elemeket (ember, hajó stb.) egyszerű, elemi geometriai primitívekből építjük fel Részletesebben l. előadás

Grafikus szerelőszalag (OGL 2.x) Vertex shader Fragment shader

OpenGL 4.x pipeline (x<3) 7

Grafikus primitívek

Grafikus primitívek - DEPRECATED

Vertex és pixel shader 10

Vertex shader A vertex shader programunkban végezzük el a bejövő geometria csúcspontjainak transzformációját glDrawArrays/glDrawElements hívásban hivatkozott csúcspontok lesznek a bemenetei A vertex shader bemeneti változóihoz (in módosító) a hozzárendelést a programból csináljuk A csúcspontbeli attribútumoknál ritkábban változó bemenetet uniform változókon keresztül adhatjuk át (uniform = a kirajzolás hívás idejére konstans) 11

Vertex shader A bejövő csúcspont koordinátáit clip space-be ( -1 <= x,y,z <= 1) kell transzformálni és a beépített gl_Position változónak átadni – ezt a pipeline nem programozható részeinek is kell gl_Position = gl_MVPMatrix * bejövő_vertex_pos4 Ezen kívül azt csinálunk „amit akarunk” (minden out-tal megjelölt változónak adhatunk értéket és továbbküldhetjük a következő programozható fázisnak) 12

Vertex shader A következő beépített kimeneti változók írhatóak a vertex shaderből: vec4 gl_Position: a transzformált homogén koordinátái a bejövő vertex-nek. Ebbe írnia kell a VS-nek. float gl_PointSize: a kirajzolandó pont mérete pixelben (point sprite-okhoz). Opcionális. vec4 gl_ClipVertex: felhasználói vágósíkokhoz. Opcionális. És ezeken kívül minden, amit mi is felveszünk... 13

Fragment shader vec4 gl_FragColor: a fragment színe, de ha nem írun bele viszont van kimeneti vec4, az lesz ez vec4 glFragData[gl_MaxDrawBuffers]: ha több color attachment-je van az aktív FBO-nak, akkor ezen keresztül írhatunk rájuk float gl_FragDepth: fragment mélységi értéke (ha módosítanánk, mint a raycasterben) vec4 gl_FragCoord: csak olvasható, a fragment homogén koordinátái (4. koord 1/w) bool gl_FrontFacing: előrefelé néz-e a fragment lapja 14

Vertex shader #version 400 in vec3 VertexPosition; in vec3 VertexColor; out vec3 Color; void main() { Color = VertexColor; gl_Position = vec4(VertexPosition,1.0); } 15

Fragment shader #version 400 in vec3 Color; out vec4 FragColor; void main() { FragColor = vec4(Color, 1.0); } 16

Program-shader megfeleltetések Vertex attribútumok és a shader bemeneti változóinak összerendelés: glBindAttribLocation( programHandle, // shader prog 0, // index "VertexPosition"); // sh-s nev glBindAttribLocation( programHandle, 1, "VertexColor"); 17

Program-shader megfeleltetések glGenVertexArrays( 1, &vaoHandle ); glBindVertexArray(vaoHandle); glEnableVertexAttribArray(0); // Vertex position glEnableVertexAttribArray(1); // Vertex color glBindBuffer(GL_ARRAY_BUFFER, positionBufferHandle); glVertexAttribPointer( 0, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte *)NULL ); glBindBuffer(GL_ARRAY_BUFFER, colorBufferHandle); glVertexAttribPointer( 1, 3, GL_FLOAT, GL_FALSE, 0, (GLubyte *)NULL ); 18

Program-shader megfeleltetések Lényegében tehát általános, indexekkel azonosított csatornákon keresztül megy az információátadás A csatornák száma a GL_MAX_VERTEX_ATTRIBS segítségével kérhetőek le 19

Layout A shader oldalon is megcsinálhatjuk a bejövő csatornák „index-esítését”, és nem kell bind-olni az attrib location-öket: layout (location = 0) in vec3 VertexPosition; layout (location = 1) in vec3 VertexColor; Ezt a kimeneti változóknál is lehet használni: layout (location = 0) out vec4 FragColor; 20

Uniform változók A shaderen belül read-only-k (konstansok), de kezdeti értéket kaphatnak uniform mat4 MVP Típusok:, n = 2,3,4 mat<n>: n x n-es mátrix vec<n>: n dim vektor 21

Uniform változók Először meg kell tudnunk az OpenGL-es azonosítóját a uniform változónak: GLuint mvpInShader = glGetUniformLocation( programHandle, "MVP"); Ezután már típusának megfelelő fv-vel értéket adhatunk neki: GlUniformMatrix4fv( mvpInShader, 1, GL_FALSE, &app_mvp[0][0]); Többiek: http://www.opengl.org/sdk/docs/man/xhtml/glUnifo rm.xml 22

Uniform változók Alaptípusok tömbjét is megjelölhetünk uniform- ként Ekkor pl. egy mátrixtömb konkrét indexen lévő mátrixának azonosítóját megkapjuk így: GLuint location = glGetUniformLocation( programHandle, "MyArray[1]" ); 23

Uniform block Több shader változó használhatja a program szempontjából ugyanazon uniform változókat Ezeket mégis külön-külön kellene feltöltenünk stb., mert ugyanannak a uniform változónak más lesz a címe a különböző shader programokban A uniform block segítségével ezen segíthetünk (csak használjunk shared layout-ot) 24

Uniform block – a shaderben uniform BlobSettings { vec4 InnerColor; vec4 OuterColor; float RadiusInner; float RadiusOuter; }; 25

Uniform block A uniform változók adatait tartalmazó puffer objektum a uniform buffer object A változókra hivatkozásnál elég az adattag nevét írni, nem kell prefixelni az UBO nevével (tehát pl. elég az InnerColor, nem kell BlobSettings.InnerColor) 26

Uniform block GLuint blockIndex = glGetUniformBlockIndex( programHandle, "BlobSettings"); GLint blockSize; glGetActiveUniformBlockiv( programHandle, blockIndex, GL_UNIFORM_BLOCK_DATA_SIZE, &blockSize); GLubyte * blockBuffer= (GLubyte *)malloc(blockSize); 27

Uniform block const GLchar *names[] = { "InnerColor", "OuterColor", "RadiusInner", "RadiusOuter" }; GLuint indices[4]; glGetUniformIndices( programHandle, 4, names, indices); GLint offset[4]; glGetActiveUniformsiv( programHandle, 4, indices, GL_UNIFORM_OFFSET, offset); 28

Uniform block GLfloat outerColor[] = {0.0f, 0.0f, 0.0f, 0.0f}; GLfloat innerColor[] = {1.0f, 1.0f, 0.75f, 1.0f}; GLfloat innerRadius = 0.25f, outerRadius = 0.45f; memcpy(blockBuffer + offset[0], innerColor, 4 * sizeof(GLfloat)); memcpy(blockBuffer + offset[1], outerColor, 4 * sizeof(GLfloat)); memcpy(blockBuffer + offset[2], &innerRadius, sizeof(GLfloat)); memcpy(blockBuffer + offset[3], &outerRadius, sizeof(GLfloat)); 29

Uniform block GLuint uboHandle; glGenBuffers( 1, &uboHandle ); glBindBuffer( GL_UNIFORM_BUFFER, uboHandle ); glBufferData( GL_UNIFORM_BUFFER, blockSize, blockBuffer, GL_DYNAMIC_DRAW ); glBindBufferBase( GL_UNIFORM_BUFFER, blockIndex, uboHandle ); 30

Fragment shader #version 400 in vec3 Color; out vec4 FragColor; void main() { FragColor = vec4(Color, 1.0); } 31