Jadi saya sudah menerapkan bagian refleksi:
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;
}
}
Sekarang pertanyaannya adalah bagaimana riak ini diimplementasikan?
time
nilai itu, Anda dapat menggeseruv.xy
dengan(sin(time),cos(time))
vektor offset. Tentu saja, Anda harus mengetahui amplitudo dari offset sinus dan cosinus. Saya akan mulai dengan hanya mengimbangi yanguv.y
pertama dan melihat bagaimana saya dapat menyesuaikan efek lebih lanjut.Jawaban:
Saya mencoba menerapkan apa yang disarankan teodron:
Itu terlihat cukup dekat (sulit untuk mengatakan tanpa gambar dasar) tetapi Anda dapat mengubah parameter.
Anda dapat melihatnya beraksi di sana: https://www.shadertoy.com/view/Xll3R7
Beberapa komentar:
EDIT: Saya mengubah yoffset untuk memasukkan modifikasi dari @cepro
sumber