Teodron'un önerdiklerini uygulamaya çalıştım:
void main()
{
vec2 uv = gl_FragCoord.xy / resolution.xy;
float sepoffset = 0.005*cos(iGlobalTime*3.0);
if (uv.y > 0.3 + sepoffset)// is air - no reflection or effect
{
gl_FragColor = texture2D(texture, vec2(uv.x, -uv.y));
}
else
{
// Compute the mirror effect.
float xoffset = 0.005*cos(iGlobalTime*3.0+200.0*uv.y);
//float yoffset = 0.05*(1.0+cos(iGlobalTime*3.0+50.0*uv.y));
float yoffset = ((0.3 - uv.y)/0.3) * 0.05*(1.0+cos(iGlobalTime*3.0+50.0*uv.y));
vec4 color = texture2D(texture, vec2(uv.x+xoffset , -1.0*(0.6 - uv.y+ yoffset)));
//
//vec4 finalColor = vec4(mix(color.rgb, overlayColor, 0.25), 1.0);
gl_FragColor = color;
}
}
Oldukça yakın görünüyor (temel görüntü olmadan söylemek zor), ancak parametreleri değiştirebilirsiniz.
Orada çalışırken görebilirsiniz: https://www.shadertoy.com/view/Xll3R7
Bazı açıklamalar:
- Görüntüyü baş aşağı çektiğimden beri y koordinatını tersine çevirmek zorunda kaldım, ancak çözünürlük.xy'ye ilettiğiniz şeylere bağlı olabilir; sonuç sizin için ters çevrilmişse, uv.y
- Düzgün beyanlarınızı değiştirdim, böylece shadertoy ile çalışır. Bu değişiklikleri göz ardı edebilirsiniz.
- Bununla birlikte, zamanı sağlayan bir üniforma eklemeniz ve iGlobalTime yerine kullanmanız gerekir (bu, saniye cinsinden zamandır)
- Örneğinizde bir tane var gibi göründüğü için bir gelgit efekti ekledim ama söylemek zor (bkz. Sepoffset değişkeni). Beğenmediyseniz kaldırabilirsiniz
- İyi görünmediği için kaplama rengini kaldırdım ve örneğinizde bir tane yoktu
- Etkinizi zevkinize göre ayarlamak için:
- efekti hızlandırmak / yavaşlatmak için iGlobalTime faktörünü değiştirin (isterseniz her birini ayrı ayrı değiştirebilirsiniz, diyelim ki x hareketini hızlandırın ve y hareketini yavaşlatın)
- efekti artırmak / azaltmak için cos () faktörünü değiştirme
EDIT: Ben yoffset @cepro değişiklik içerecek şekilde değiştirdim
time
değeri kullanarak ,uv.xy
(sin(time),cos(time))
ofset vektörü ile kaydırabilirsiniz. Tabii ki, sinüs ve kosinüs ofsetlerinin genliklerini bulmalısınız. Sadeceuv.y
ilkini dengelemekle başlayacağım ve efekti nasıl daha fazla ayarlayabileceğimi göreceğim.