J'ai donc déjà implémenté la partie réflexion:
uniform sampler2D texture;
uniform vec2 resolution;
uniform vec3 overlayColor;
void main()
{
vec2 uv = gl_FragCoord.xy / resolution.xy;
if (uv.y > 0.3)// is air - no reflection or effect
{
gl_FragColor = texture2D(texture, vec2(uv.x, uv.y));
}
else
{
// Compute the mirror effect.
vec4 color = texture2D(texture, vec2(uv.x, 0.6 - uv.y));
//
vec4 finalColor = vec4(mix(color.rgb, overlayColor, 0.25), 1.0);
gl_FragColor = finalColor;
}
}
Maintenant, la question est de savoir comment ces ondulations sont mises en œuvre?
time
valeur, vous pouvez déplacer leuv.xy
avec un(sin(time),cos(time))
vecteur de décalage. Bien sûr, vous devez déterminer les amplitudes des décalages sinus et cosinus. Je commencerais par juste compenser leuv.y
premier et voir comment je peux ajuster davantage l'effet.