Tu t'y connais en shaders ? J'ai essayé avec processing de faire une équation de diffusion mais ça donne pas vraiment le bon trucs, y'a des carrées qui apparaissent, il a l'air de faire une approximation...
Mon fichier glsl :
uniform sampler2D tex;
uniform vec2 offset;
void main(void)
{
float dx = offset.s;
float dy = offset.t;
vec2 st = gl_TexCoord[0].st;
// Apply 3x3 gaussian filter
vec4 color = -4.0 * texture2D(tex, st);
color += 1.0 * texture2D(tex, st + vec2(+dx, 0.0));
color += 1.0 * texture2D(tex, st + vec2(-dx, 0.0));
color += 1.0 * texture2D(tex, st + vec2(0.0, +dy));
color += 1.0 * texture2D(tex, st + vec2(0.0, -dy));
gl_FragColor = 1.0*color/3.0 ;
}
Hors ligne
Non je m'y connais pas plus que ça, juste je m'y intéresse et les utilise car c'est très économe en terme de ressources. Mais regarde l'exemple GEM/Pd cité plus haut, c'est assez souple d'emploi et très efficace.
Pour le patch dont je parlais il faut que je le retrouve sur ma machine qui vient de rendre l'âme (la 3eme en 1 an, je commence à me demander sérieusement si tous ces produit informatique actuels (hardware j'entend) ne sont pas tout simplement tous de la MERDE en barre)
Hors ligne
Bon en faisant tout dans le shader ça à l'air de mieux marcher...
uniform sampler2D tex;
uniform vec2 offset;
void main(void)
{
float dx = offset.s;
float dy = offset.t;
vec2 st = gl_TexCoord[0].st;
vec4 A = texture2D(tex, st);
float dt=0.01;
// Apply 3x3 gaussian filter
vec4 D2A = -4.0 * texture2D(tex, st);
D2A += 1.0 * texture2D(tex, st + vec2(+dx, 0.0));
D2A += 1.0 * texture2D(tex, st + vec2(-dx, 0.0));
D2A += 1.0 * texture2D(tex, st + vec2(0.0, +dy));
D2A += 1.0 * texture2D(tex, st + vec2(0.0, -dy));
gl_FragColor = A + dt*( 20.0*D2A ) ;
}
Hors ligne
Pages: 1 2