Fejlett grafikai algoritmusok Megvilágítási modellek Illés László, Palatinus Endre, Provits Milán, Török Péter
tartalom Projekt összefoglaló Keretrendszer Shaderek További lépések Tévutak Végleges irány Shaderek További lépések Eddigi teljesítmény
Összefoglalás Megvilágítási modellek megvalósítása GLSL nyelven, OpenGL keretrendszerben Projekt weblap: http://code.google.com/p/brightr Tagok: Illés László, Palatinus Endre, Provits Milán, Török Péter
Keretrendszer - Tévutak SharpGL Ígéretes kezdeményezés Nem kezeli a shader betöltést GLEW bekötése nem sikerült, access violation http://www.codeproject.com/KB/openGL/sharpgl.aspx TAO Framework Weboldala nem elérhető Mintaprogramjai kivétellel leállnak http://sourceforge.net/projects/taoframework/
Keretrendszer Nate Robins féle alapok Egyéb eszközök Ablakkezelés WaveForm OBJ betöltés Nézőpont váltás Egyéb eszközök Shaderek dinamikus betöltése Vertex program Fregmens program Szöveges leíró
Keretrendszer
Keretrendszer - TODO Eredmények összehasonlítása A két kép különbsége új ablakban Shaderek áttekintése egy külön ablakban Leírás Forráskód Shaderek szerkesztése futásidőben Szövegszerkesztő ablak Újrabetöltés (Shader betöltés, fordítás, kötés)
VERTEX PROGRAM – TOON2 Tárgyak megvilágítása korlátozott számú színnel, rajzfilmhatás keltése varying vec3 lightDir,normal; void main() { lightDir = normalize(vec3(gl_LightSource[0].position)); normal = gl_NormalMatrix * gl_Normal; gl_FrontColor = gl_Color; gl_Position = ftransform(); }
FREGMENS program – toon2 varying vec3 lightDir,normal; void main() { float intensity; vec4 color; // normalizing the lights position to be on the safe side vec3 n = normalize(normal); intensity = dot(lightDir,n); if (intensity > 0.95) color = vec4(1.0,1.0,1.0,1.0); else if (intensity > 0.5) color = vec4(0.7,0.7,0.7,1.0); else if (intensity > 0.25) color = vec4(0.4,0.4,0.4,1.0); else color = vec4(0.1,0.1,0.1,1.0); gl_FragColor = (gl_FrontLightModelProduct.sceneColor + gl_FrontLightProduct[0].ambient + gl_FrontLightProduct[0].diffuse + gl_FrontLightProduct[0].specular) * color; }
Vertex program – phong Phong-féle megvilágítási modell GLSL megvalósítása varying vec3 N; varying vec3 v; void main(void) { v = vec3(gl_ModelViewMatrix * gl_Vertex); N = normalize(gl_NormalMatrix * gl_Normal); gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; }
FREGMENS PROGRAM – PHONG varying vec3 N; varying vec3 v; void main(void) { // we are in Eye Coordinates, so EyePos is (0,0,0) vec3 L = normalize(gl_LightSource[0].position.xyz - v); vec3 E = normalize(-v); vec3 R = normalize(-reflect(L,N)); //calculate Ambient Term: vec4 Iamb = gl_FrontLightProduct[0].ambient; //calculate Diffuse Term: vec4 Idiff = gl_FrontLightProduct[0].diffuse * max(dot(N,L), 0.0); // calculate Specular Term: vec4 Ispec = gl_FrontLightProduct[0].specular * pow(max(dot(R,E),0.0), gl_FrontMaterial.shininess); // write Total Color: gl_FragColor = gl_FrontLightModelProduct.sceneColor + Iamb + Idiff + Ispec; }
További lépések Shaderek tökéletesítése Shaderek összehasonlítása Szubjektív módszerekkel Objektív módszerekkel Különbségkép számítás, eltérések egymástól Számítási igény (műveletek száma)
Példák
Köszönöm a figyelmet!