Also habe ich den Reflexionsteil bereits implementiert:
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;
}
}
Die Frage ist nun, wie diese Wellen implementiert werden.
time
Wert können Sie denuv.xy
mit einem(sin(time),cos(time))
Versatzvektor verschieben. Natürlich müssen Sie die Amplituden der Sinus- und Cosinus-Offsets herausfinden. Ich würde damit beginnen, nur denuv.y
ersten zu versetzen und sehen, wie ich den Effekt weiter anpassen kann.Antworten:
Ich habe versucht umzusetzen, was Teodron vorgeschlagen hat:
Es sieht ziemlich genau aus (ohne das Basisbild ist es schwer zu sagen), aber Sie können die Parameter anpassen.
Sie können es dort in Aktion sehen: https://www.shadertoy.com/view/Xll3R7
Einige Anmerkungen:
BEARBEITEN: Ich habe den yoffset geändert, um die Änderung von @cepro aufzunehmen
quelle