Voila un petit effet 2D facile à mettre en oeuvre avec un programme GLSL (OpenGL Shading Language): le twirl ou swirl. Il s’agit de déformer une image 2D comme si on la faisait tournoyer autour de son centre.
Et concrétement ça donne quoi? Voilà l’image originale:
Et voila le résultat pour quelques valeurs de torsion:
Voilà maintenant le code du programme GLSL:
Vertex shader
#version 150 in vec4 gxl3d_Position; in vec4 gxl3d_TexCoord0; out vec4 Vertex_UV; void main() { gl_Position = gxl3d_Position; Vertex_UV = gxl3d_TexCoord0; }
Pixel shader
#version 150 uniform sampler2D tex0; uniform float twirl_amount; in vec4 Vertex_UV; out vec4 FragColor; void main (void) { vec2 uv = Vertex_UV.xy-0.5; uv.y *= -1.0; float angle = atan(uv.y,uv.x); float radius = length(uv); angle+= radius * twirl_amount; vec2 shifted = radius*vec2(cos(angle), sin(angle)); FragColor = texture(tex0, shifted+0.5); }
La demo, codée avec GLSL Hacker, est dispo dans le demopack sous le répertoire host_api/PostFX/Twirl/.
Références:
– Twirl Filter in GLSL