GPGPU labor I. OpenGL, Cg.

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

GraphGame gg001-Triangle
Grafikus szoftver alrendszer, OpenGL alapok
9. előadás (2005. április 26.) Parancssor argumentum kezelés példák (K&R) Fordítóprogramok A C előfordító 1.
8. előadás (2005. április 19.) Pozicionálás fájlban (folyt.) I/O mechanizmus váltás Hibakezelő függvények Változók tárolási osztályai Parancssor-argumentumok.
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...
2D grafikus rendszerek Szirmay-Kalos László.
OpenGL Szirmay-Kalos László In theory, there is no difference
3D Játékok készítése OpenGL környezetben
Mesh betöltés, kirajzolás Szécsi László. dx11-ben nincs – játékfejlesztők írnak maguknak úgyis DXUT-ban van – CDXUTSDKMesh – csak sdkmesh formátumot tud.
 Bővítmény rendszer  Az OpenGL bővítményeihez hasonló  A specifikiáció természetes fejlődése ▪ Gyártó specifikus bővítmény ▪ Általános bővítmények.
 Nincs szinkronizáció és kommunikáció  Csővezeték alkalmazása  Párhuzamosítás Proc 2Proc 1 Csővezeték Proc 1 Proc 21 Proc 22 Párhuzamosság.
GPGPU labor V. GPU ray tracing. Kezdeti teendők Tantárgy honlapja, GPU ray tracing A labor kiindulási alapjának letöltése (lab5_base.zip), kitömörítés.
10. előadás (2004. április 20.) A C előfordító (folytatás) Néhány hasznos compiler opció Egy tanulságos könyvtári függvény Változó hosszúságú argumentum.
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
GRAFIKUS PRIMITÍVEK KITÖLTÉSE
Mikrovezérlők alkalmazástechnikája laboratóriumi gyakorlat Kovács Tamás & Mingesz Róbert 3. óra február 20., 23.
Borland C/C++ mintapéldák függvényekre. 1. példa Írjunk olyan függvényt amely egy számot kiirat.
Transzformációk kucg.korea.ac.kr.
Textúrák, világmodellek
Grafikus szoftver alrendszer, OpenGL alapok
Számítógépes grafika OpenGL 1. gyakorlat.
Számítógépes Grafika 1-2. gyakorlat
C++ alapok, harmadik óra
Mikrovezérlők, perifériák laboratóriumi gyakorlat 3. óra szeptember 18. Mingesz Róbert v
Számítógépes grafika 3. gyakorlat.
Számítógépes Grafika 1-2. gyakorlat Programtervező informatikus (esti)‏ 2011/2012 őszi félév.
Számítógépes Grafika Programtervező informatikus (esti)‏ Textúrázás.
Készítette: Csíki Gyula
Hernyák Zoltán Programozási Nyelvek II.
Széchenyi Isván Egyetem Számítógépes hálózatok II 1 Számítógépes Hálózatok II Széchenyi István Egyetem.
Térfogatvizualizáció
Térfogatvizualizáció
Játékfejlesztés Szirmay-Kalos László.
Rendering pipeline Ogre3D
Kezdeti teendők Letöltés: CharacterModellingBase.zip Blender3D futtatása headBase.blend betöltése.
2D grafikus rendszerek Szirmay-Kalos László.
Effect framework, HLSL shader László Szécsi. forráskódban elérhető egyszerűsíti a shaderek fordítását, rajzolási állapot beállítását – pass: egy ilyen.
Grafikus játékok fejlesztése Szécsi László t09-texture
 Kvantált kép fényesség értékei: G [ 0, Gmax ]  G fényességű pontok száma: P(G)
GPGPU labor III. Iteratív algoritmusok. Kezdeti teendők Tantárgy honlapja, Iteratív algoritmusok A labor kiindulási alapjának letöltése (lab3base.zip),
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 4. Gyakorlat Függvény paraméterek, dinamikus.
2. gyakorlat DirectX 2007/2008 tavasz Klár Gergely
A Visual Basic nyelvi elemei
Számítógépes Grafika 4. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Vizualizáció és képszintézis Sugárkövetés (Dart + GLSL) Szécsi László.
Számítógépes grafika OpenGL 5. gyakorlat.
Excel programozás (makró)
Képek, képfeldolgozás Szirmay-Kalos László.
Számítógépes grafika DirectX 7. gyakorlat. Emlékeztető Múlt órán mesheket és transzformációkat használtunk Most primitívkirajzoláshoz nézünk meg egy hasznos.
Grafikus szoftver Szirmay-Kalos László. Interaktív programok felépítése input csővezeték output csővezeték.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Grafikus szoftver alrendszer, OpenGL alapok 1. előadás (2.rész)
1 OpenGL grafikus rendszer Dr. Nehéz Károly egyetemi adjunktus Miskolci Egyetem Alkalmazott Informatikai Tanszék.
1 Viewing Megtekintés. 2 Miről lesz szó? ► Modellek megtekintése különböző, vagy tetszőleges irányokból ► Nézőpont áthelyezése a háromdimenziós térben.
Google Summer of Code 2015 OpenCL image support for the r600g driver.
Grafikus hardver/szoftver alapok Szirmay-Kalos László.
OpenCL bővítmények.
Excel programozás (makró)
Vizualizáció és képszintézis
Átlátszóság, csipkézettség, köd
Görbék, felületek.
Vizualizáció és képszintézis
Lineáris egyenletrendszerek megoldása
GPGPU – CUDA 2..
Alapok Model betöltés Anyagjellemzők Fényforrások Shaderek
Kamera, 3D, transzformációk Szécsi László
OpenGL kiterjesztések (extensions)
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
CUDA – OpenGL.
Függvénysablonok használata
Előadás másolata:

GPGPU labor I. OpenGL, Cg

Kezdeti teendők Tantárgy honlapja, Bevezetés Alap könyvtárak letöltése (GPGPU.zip), kitömörítés a D meghajtóra Első labor kiindulási alapjának letöltése (lab1_cg_opengl_BASE.zip), kitömörítés a D:\GPGPU\labs könyvtárba D:\GPGPU\labs\lab1_cg_opengl\lab1_cg_opengl\lab1_cg_opengl.sln indítása Project tulajdonságai – Configuration Properties – Debugging – Working Directory = $(ProjectDir)\..\..\..\bin

Alapok Glut init Ablak létrehozás Callback függvények Clear color Alap mátrix (identity) beállítások Swap buffers

Main() glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE); glutInitWindowSize(600, 600); glutCreateWindow("GPGPU Lab1"); glutDisplayFunc(display); glutKeyboardFunc(keyboard); init(); glutMainLoop();

Billentyűzet void keyboard(unsigned char key, int x, int y) { switch(key) case 27: exit(0); break; }

Inicializáció void init() { glewInit(); }

Megjelenítés void display() { } glClearColor(0.17f, 0.4f, 0.6f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glMatrixMode(GL_PROJECTION); drawMyMesh(); glFinish(); glutSwapBuffers(); }

drawMyMesh() void drawMyMesh() { } glNormal3f(0,0,1); glBegin(GL_TRIANGLES); glColor3f(1,0,0); glTexCoord2f(1,0); glVertex3f( 0.5f, -0.5f, 0); glColor3f(0,1,0); glTexCoord2f(0,0); glVertex3f(-0.5f, -0.5f, 0); glColor3f(0,0,1); glTexCoord2f(0.5,1); glVertex3f( 0, 0.5f, 0); glEnd(); }

Mátrixok glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,1,0.01,100); //(aspect = 1) glMatrixMode(GL_MODELVIEW); gluLookAt(0,1,2,0,0,0,0,1,0);

Textúra Globális: GLuint textureID; Init glEnable(GL_TEXTURE_2D); glGenTextures(1, &textureID); glBindTexture(GL_TEXTURE_2D, textureID); int textureSize = 8; GLubyte* pixelData = new GLubyte[textureSize * textureSize * 4]; for(int i = 0; i < textureSize; i++) for(int j = 0; j < textureSize; j++) { pixelData[j * textureSize * 4 + i * 4] = pixelData[j * textureSize * 4 + i * 4 + 1] = pixelData[j * textureSize * 4 + i * 4 + 2] = pixelData[j * textureSize * 4 + i * 4 + 3] = (i+j)%2 * 255; } glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8, textureSize, textureSize,0,GL_RGBA,GL_UNSIGNED_BYTE, pixelData); delete pixelData; glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D);

Textúra glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, textureID); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); drawMyMesh(); glBindTexture(GL_TEXTURE_2D, 0); glDisable(GL_TEXTURE_2D);

Textúra szűrés glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//GL_CLAMP glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

Önálló feladat Több háromszög rajzolása Négyzetek, pontok rajzolása Játék a színekkel, textúra koordinátákkal

Gömb, teáskancsó glutSolidSphere(0.5,20,20); glutSolidTeapot(0.5); glEnable(GL_DEPTH_TEST); glClearDepth(1.0);

Anim #include <ctime> float dt = 0; Display: static float rot = 0; rot += dt * 10; glRotatef(rot,0,1,0); glutSolidTeapot(0.5); Idle: void idle() { static clock_t currentTime; currentTime = clock(); static clock_t lastTime = currentTime; dt = (float)(currentTime - lastTime) / (float) CLOCKS_PER_SEC; glutPostRedisplay(); lastTime = currentTime; } Main: glutIdleFunc(idle);

Cg init (cg.lib, cggl.lib) #include <CG/cg.h> #include <CG/cggl.h> //Globális paraméter: CGprogram vertexProgram; CGprogram fragmentProgram; //Init: CGcontext shaderContext = cgCreateContext(); // árnyaló kontextus CGprofile vertexProf = cgGLGetLatestProfile(CG_GL_VERTEX); cgGLEnableProfile(vertexProf); vertexProgram = cgCreateProgramFromFile( shaderContext, CG_SOURCE, "lab1.cg", vertexProf, "vs", NULL); if(vertexProgram == 0) { cerr<<"!!!!CG_ERROR: Unable to build vertex program.."<<endl; const char* comM_PIlerError = cgGetLastListing(shaderContext); if(comM_PIlerError) cerr<<comM_PIlerError<<endl; else cerr<<"File not found?"<<endl; } cgGLLoadProgram(vertexProgram); // GPU-ra töltés

CgInit CGprofile fragmentProf = cgGLGetLatestProfile(CG_GL_FRAGMENT); cgGLEnableProfile(fragmentProf); CGprogram fragmentProgram = cgCreateProgramFromFile(shaderContext, CG_SOURCE, "lab1.cg", fragmentProf, "fs", NULL); if(fragmentProgram == 0) { cerr<<"!!!!CG_ERROR: Unable to build fragment program.."<<endl; const char* comM_PIlerError = cgGetLastListing(shaderContext); if(comM_PIlerError) cerr<<comM_PIlerError<<endl; else cerr<<"File not found?"<<endl; } cgGLLoadProgram(fragmentProgram); // GPU-ra töltés

Cg bekapcs/kikapcs (Display) cgGLEnableProfile(cgGLGetLatestProfile(CG_GL_VERTEX)); cgGLEnableProfile(cgGLGetLatestProfile(CG_GL_FRAGMENT)); cgGLBindProgram(vertexProgram); // ez legyen a futó program cgGLBindProgram(fragmentProgram); // ez a program fusson glutSolidTeapot(0.5); cgGLDisableProfile(cgGLGetLatestProfile(CG_GL_VERTEX)); cgGLDisableProfile(cgGLGetLatestProfile(CG_GL_FRAGMENT));

Cg shader (lab1.cg létrehozása a bin könyvtárba) struct VS_IN { float4 position : POSITION; float4 texCoord : TEXCOORD; float3 normal: NORMAL; }; struct VS_OUT float4 hPos : POSITION; float2 texCoord : TEXCOORD; VS_OUT vs(VS_IN In, uniform float4x4 mvp : state.matrix.mvp) VS_OUT Out = (VS_OUT) 0; Out.hPos = mul(mvp, In.position); Out.texCoord = In.texCoord.xy; return Out; } float4 fs(VS_OUT In):COLOR return float4(1,1,0,1);

Shader változók Definíció (globális): CGparameter LightDir; CGparameter TextureShift; Lekérdezés (Init): LightDir = cgGetNamedParameter(vertexProgram, "lightdir"); TextureShift = cgGetNamedParameter(fragmentProgram, “shift"); Beállítás (Display): cgGLSetParameter3f(LightDir, 10, 20, 30);

Shader változók struct VS_OUT { float4 hPos : POSITION; float2 texCoord : TEXCOORD; float4 color:COLOR; }; VS_OUT vs(VS_IN In, uniform float4x4 mvp : state.matrix.mvp, uniform float3 lightdir) VS_OUT Out = (VS_OUT) 0; Out.hPos = mul(mvp, In.position); Out.texCoord = In.texCoord.xy; Out.color = dot(In.normal, normalize(lightdir)); Out.color = saturate(Out.color); return Out; } float4 fs(VS_OUT In):COLOR return float4(In.color.rgb,1);

Textúra float4 fs(VS_OUT In, uniform sampler2D texture : register(s0)):COLOR { float4 textureColor = tex2D(texture, In.texCoord); float4 lightingColor = float4(In.color.rgb,1); return textureColor * lightingColor; }

Textúra eltolása (Display) static float shift = 0; shift += dt* 0.1f; cgGLSetParameter2f(TextureShift, shift, 2 * shift); Shader: float4 fs(VS_OUT In, uniform sampler2D texture : register(s0), uniform float2 shift):COLOR { float4 textureColor = tex2D(texture, In.texCoord + shift); float4 lightingColor = float4(In.color.rgb,1); return textureColor * lightingColor; }

Önálló feladat Játék a bemenő paraméterekkel, textúra címzéssel és árnyalással Csúcspontok elmozgatása ( float dist = sin(t + In.position.x * In.position.y * 5.0 + In.position.z) * 0.1; In.position.xyz += In.normal * dist;)

Vége