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
timedeğ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.yilkini dengelemekle başlayacağım ve efekti nasıl daha fazla ayarlayabileceğimi göreceğim.