140 likes | 260 Views
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 Tévutak Végleges irány Shaderek További lépések Eddigi teljesítmény. Összefoglalás.
E N D
Fejlett grafikai algoritmusokMegvilágítási modellek Illés László, Palatinus Endre, Provits Milán, Török Péter
tartalom • Projekt összefoglaló • Keretrendszer • 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, accessviolation • 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 • NateRobins féle alapok • 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 - 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 varyingvec3 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 varyingvec3 lightDir,normal; voidmain() { floatintensity; vec4 color; // normalizingthelightspositionto be onthesafeside vec3 n = normalize(normal); intensity = dot(lightDir,n); if (intensity > 0.95) color = vec4(1.0,1.0,1.0,1.0); elseif (intensity > 0.5) color = vec4(0.7,0.7,0.7,1.0); elseif (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) { // weareinEyeCoordinates, soEyePos is (0,0,0) vec3 L = normalize(gl_LightSource[0].position.xyz - v); vec3 E = normalize(-v); vec3 R = normalize(-reflect(L,N)); //calculateAmbient Term: vec4 Iamb = gl_FrontLightProduct[0].ambient; //calculateDiffuse Term: vec4 Idiff = gl_FrontLightProduct[0].diffuse * max(dot(N,L), 0.0); // calculateSpecular 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)