第一个
#define F cos(x-y)*cos(y),sin(x+y)*sin(y)
vec2 s(vec2 p){
float d=iTime*0.2;
float x=8.*(p.x+d);
float y=8.*(p.y+d);
return vec2(F);}
void mainImage( out vec4 f, in vec2 w ){
vec2 i=iResolution.xy;
vec2 r=w/i;
q=r+10./iResolution.x*(s(r)-s(r+i));
f=texture(iChannel0,q);}
关于最后一行texture的问题,如果把q改成r,那么就是一副正常的图像,因为texture函数第一行指定采样器,即图片,第二行指定纹理坐标。 不过第一行的函数哪里来的?很是迷惑
https://www.shadertoy.com/view/Mls3DH
第二个:
void mainImage( out vec4 fragColor, in vec2 fragCoord )
{
vec2 uv = fragCoord.xy / iResolution.xy;
float time = iTime;
vec3 raintex = texture(iChannel1,vec2(uv.x,uv.y)).rgb/8.;
vec2 where = (uv.xy-raintex.xy);
vec3 texchur1 = texture(iChannel0,vec2(where.x,where.y)).rgb;
fragColor = vec4(texchur1,1.0);
}
iChannel1是一张类似噪音的黑白图。这样就很好理解了。白颜色的RGB值是(1,1,1),然而如果让整体偏移1的话那么原图像都偏没了,毕竟屏幕只是0到1而已,所有除以8,没什么特别的含义,想偏移大点就除个小数字,反之除个大数字就行了。