网站建设转正申请报告,外贸seo网站开发,wordpress微信群机器人,深圳网站建设制作公司很著名的shadertoy网站#xff0c;集合了非常多大神利用数学写出美妙的shader效果。像shadertoy创始人之一的IQ大神它在这方面有很多的建树。他的利用光线步进和躁声可以创建很多不可思议的3D场景。 vscode有一件shadertoy的插件#xff0c;安装后可以新建一个*.glsl文件集合了非常多大神利用数学写出美妙的shader效果。像shadertoy创始人之一的IQ大神它在这方面有很多的建树。他的利用光线步进和躁声可以创建很多不可思议的3D场景。 vscode有一件shadertoy的插件安装后可以新建一个*.glsl文件写好代码就可以直接运行看效果了。我试了一下非常方便.如果想要学习shader和一些数学在图形方面的应用我觉得这是一个非常好的插件. 下面写了四个简单示例水波纹、风景利用2维值躁声和fmb躁声模拟山和水的流动和天空和云朵 波纹 雷达 。源码在下面
#define CAMERA_POS vec3(0,0,10)
#define SPHERE_POS vec3(0,0,-5)
#define SPHERE_RADIUS 1.
#define MAX_DIST 200.
#define MAX_STEPS 200
#define LIGHT_POS vec3(-2,3,0)
#define time iTime*0.8mat3 lookAt(vec3 cameraPos,vec3 target){vec3 upvec3(0,1,0);vec3 znormalize(cameraPos-target);//zvec3 xnormalize(cross(up,z));vec3 ynormalize(cross(z,x));return mat3(x,y,z);
}mat3 rotateMatrix(float rad,vec3 axis){axisnormalize(axis);float ccos(rad);float ssin(rad);float t1.-c;float xaxis.x;float yaxis.y;float zaxis.z;return mat3(vec3(x*x*tc,y*x*t-z*s,z*x*ty*s),vec3(x*y*tz*s,y*y*tc,z*y*t-x*s),vec3(x*z*t-y*s,y*z*tx*s,z*z*tc));
}
vec3 rotate(vec3 pos,vec3 origin,float rad){float ccos(rad);float ssin(rad);vec3 deltapos-origin;return vec3(pos.x,delta.y*c-delta.z*sorigin.y,delta.y*sdelta.z*corigin.z);
}vec3 rotateX(vec3 pos,vec3 origin,float rad){float ccos(rad);float ssin(rad);vec3 deltapos-origin;return vec3(delta.xorigin.x,delta.y*c-delta.z*sorigin.y,delta.y*sdelta.z*corigin.z);
}vec3 rotateY(vec3 pos,vec3 origin,float rad){float ccos(rad);float ssin(rad);vec3 deltapos-origin;return vec3(c*delta.xs*delta.zorigin.x,pos.y,s*delta.x-c*delta.zorigin.z);
}
vec3 rotateZ(vec3 pos,vec3 origin,float rad){float ccos(rad);float ssin(rad);vec3 deltapos-origin;return vec3(delta.x*c-delta.y*sorigin.x,delta.x*sdelta.y*corigin.y,pos.z);
}
// 投影坐标系
vec2 projectionCoord(in vec2 coord, in float scale) {return scale * 2. * (coord - 0.5 * iResolution.xy) / min(iResolution.x, iResolution.y);
}// 坐标轴
vec4 AxisHelper(in vec2 coord, in float axisWidth, in vec4 xAxisColor, in vec4 yAxisColor) {vec4 color vec4(0, 0, 0, 0);float dx dFdx(coord.x) * axisWidth;float dy dFdy(coord.y) * axisWidth;if(abs(coord.x) dx) {color yAxisColor;} else if(abs(coord.y) dy) {color xAxisColor;}return color;
}float SDFSphere(vec3 p){return length(p-SPHERE_POS)-SPHERE_RADIUS;
}
vec3 rayDir(vec2 coord){return normalize(vec3(coord,0)-CAMERA_POS);
}// 计算球体的法线
vec3 SDFNormal(in vec3 p) {const float h 0.0001;const vec2 k vec2(1, -1);return normalize(k.xyy * SDFSphere(p k.xyy * h) k.yyx * SDFSphere(p k.yyx * h) k.yxy * SDFSphere(p k.yxy * h) k.xxx * SDFSphere(p k.xxx * h));
}vec3 calcNormal2(in vec3 p) // for function f(p)
{const float h 0.0001; // replace by an appropriate value#define ZERO (min(iFrame,0)) // non-constant zerovec3 n vec3(0.0);for( int i0; i4; i ){vec3 e 0.5773*(2.0*vec3((((i3)1)1),((i1)1),(i1))-1.0);// n e*map(pose*h).x;}return normalize(n);
}
vec3 rayMarch(vec2 coord){float d00.;vec3 rdrayDir(coord);vec3 colorvec3(0);for(int i0;iMAX_STEPS;i){vec3 pCAMERA_POSrd*d0;float d1SDFSphere(p);d0d1;if(d10.01){vec3 nSDFNormal(p);vec3 lightDirnormalize(LIGHT_POS-p);float cclamp(dot(n,lightDir),0.,1.);colorvec3(1,0,0)*c;break;}if(d0MAX_DIST){break;}}return color;
}// 2D Random
float random (vec2 st) {return fract(sin(dot(st, vec2(12.9898,78.233)))* 43758.5453123);
}// 2D Noise based on Morgan McGuire morgan3d
// https://www.shadertoy.com/view/4dS3Wd
float noise (vec2 st) {vec2 i floor(st);vec2 f fract(st);// Four corners in 2D of a tilefloat a random(i);float b random(i vec2(1.0, 0.0));float c random(i vec2(0.0, 1.0));float d random(i vec2(1.0, 1.0));// Smooth Interpolation// Cubic Hermine Curve. Same as SmoothStep()vec2 u f*f*(3.0-2.0*f);// u smoothstep(0.,1.,f);// Mix 4 coorners percentagesreturn mix(a, b, u.x) (c - a)* u.y * (1.0 - u.x) (d - b) * u.x * u.y;
}
vec2 hash( vec2 p )
{p vec2( dot(p,vec2(127.1,311.7)),dot(p,vec2(269.5,183.3)) );return -1.0 2.0*fract(sin(p)*43758.5453123);
}
float noise12( in vec2 p )
{const float K1 0.366025404; // (sqrt(3)-1)/2;const float K2 .211324865; // (3-sqrt(3))/6;vec2 i floor( p (p.xp.y)*K1 );vec2 a p - i (i.xi.y)*K2;vec2 o (a.xa.y) ? vec2(1.0,0.0) : vec2(0.0,1.0);vec2 b a - o K2;vec2 c a - 1.0 2.0*K2;vec3 h max( 0.5-vec3(dot(a,a), dot(b,b), dot(c,c) ), 0.0 );vec3 n h*h*h*h*vec3( dot(a,hash(i0.0)), dot(b,hash(io)), dot(c,hash(i1.0)));return dot( n, vec3(70.0) );
}
float fbm(vec2 uv)
{ float f;mat2 m mat2( 1.6, 1.2, -1.2, 1.6 );f 0.5000*noise12( uv ); uv m*uv;f 0.2500*noise12( uv ); uv m*uv;f 0.1250*noise12( uv ); uv m*uv;f 0.0625*noise12( uv ); uv m*uv;f 0.5 0.5*f;return f;
}
float segment(vec2 uv,vec2 s,vec2 e,float lineWidth,float b){float halfLineWidthlineWidth*.5;vec2 deltae-s;vec2 puv-s;float tclamp(dot(p,delta)/dot(delta,delta),0.,1.);float distlength(p-t*delta);return 1.-smoothstep(halfLineWidth,halfLineWidthb,dist);
}
float rect(vec2 uv,vec2 center,vec2 size){vec2 dabs(uv-center)-size;return step(length(max(d,0.))min(max(d.x,d.y),0.),0.);
}
float sdRect(vec2 uv,vec2 p,vec2 size){vec2 dabs(uv-p)-size;return length(max(d,0.))min(max(d.x,d.y),0.);
}
float circle(vec2 uv,vec2 c,float r,float b){float lenlength(uv-c);float bbb0.?b*0.5:0.;return 1.-smoothstep(r-bb,rbb,len);
}
float strokeCircle(vec2 uv,vec2 c,float r,float lineWidth,float b){float halfLineWidthlineWidth*.5;float lenlength(uv-c);float bbb0.?b*0.5:0.;return smoothstep(r-halfLineWidth-b,r-halfLineWidth,len)-smoothstep(rhalfLineWidth,rhalfLineWidthbb,len);
}
float random(float x){return abs(fract(143.45454*sin(x)));
}vec4 color_blend(vec4 source,vec4 dest){float casource.adest.a*(1.-source.a);return vec4((source.rgb*source.adest.rgb*dest.a*(1.-source.a)),ca);//return vec4((source.rgb*source.adest.rgb*dest.a*(1.-source.a))/ca,ca);
}vec4 ripple(vec2 uv,vec2 p,float r,float num,vec3 color){vec4 colvec4(0);float lineWidthr/(num2.);float tfract(time*0.5);for(float i0.;inum;i){float ratio(i1.)/num;float ct(tratio)1.?(tratio)-1.:tratio;float crr*ct;float alpha1.-ct;float retstrokeCircle(uv,p,rcr,lineWidth,0.);if(ret0.){colret*color_blend(vec4(color,alpha),col);} //colvec4(color.rgb,alpha)*ret; }if(circle(uv,p,r*0.5,0.2)0.){colcolor_blend(vec4(color,1),col);}//colvec4(color.rgb,1.)*circle(uv,vec2(0),r*0.8,0.);return col;
}vec4 ring(vec2 uv,vec2 p,float r,float num,vec3 color){vec4 colvec4(0);float tfract(time*0.2544);for(float i0.;inum;i){float ratio(i1.)/num;float ct(tratio)1.?(tratio)-1.:tratio;float crr*ct;float alpha1.-ct;float retcircle(uv,p,rcr,0.);if(ret0.){colret*color_blend(vec4(color,alpha),col);// col.rgbcol.rgb*col.a;}}return col;
}
mat3 setCamera(vec3 ro, vec3 target, float cr) {vec3 z normalize(target - ro);vec3 up normalize(vec3(sin(cr), cos(cr), 0));vec3 x cross(z, up);vec3 y cross(x, z);return mat3(x, y, z);
}vec4 scenery(vec2 uv,vec2 p,float r,float num){vec4 colvec4(0);float tfract(time);vec2 n p;vec2 pos;float rdsdRect(uv,p,vec2(r));if(rd0.){vec2 m((uv-p)r)*2.-1.; // m.xtime;float dlength(m);if(m.y0.2){vec3 originvec3(10,1,100);mat3 matlookAt(origin,vec3(0,-1,0));vec3 dirmat*vec3(m,-1);dir.z*40.;vec2 korigin.xzdir.xz*(10.-origin.y)/dir.y;float anoise(0.1*ktime);col.rgbmix(vec3(0.3,0.7,1),vec3(0,0.6,0.9),smoothstep(0.4,0.8,a));col.rgb0.3*vec3(1)*smoothstep(1.,0.,length(dir.xy));} else if(abs(m.y-0.3*noise(m*2.))0.2){col.rgbvec3(.2);}else{vec3 originvec3(0,1.,2);mat3 matlookAt(origin,vec3(0,.6,0));vec3 dirmat*vec3(m,-1);vec2 korigin.xzdir.xz*(100.-origin.y)/dir.y;float afbm(0.01*ktime*0.02);vec3 c1mix(vec3(0.2,0.7,1),vec3(1),smoothstep(0.3,1.,a*step(0.,m.y-0.2)));col.rgbc1vec3(1)*smoothstep(1.,0.,length(m));if(dir.z0.){//col.rgbvec3(1,0,0);}}}return col;
}#define PI2 3.1415926*2.
vec4 radar(vec2 uv,vec2 p,float r,float num,vec3 color){vec4 colvec4(0);vec2 p2uv-p;float tfract(time*0.2);float dxdFdx(uv.x);float lwdx*3.; float thetat*PI2;vec2 scanpvec2(cos(theta),sin(theta))*(r-lw);colvec4(1)*strokeCircle(uv,p,r,lw,0.);colvec4(1)*strokeCircle(uv,p,r*0.66,lw,0.);colvec4(1)*strokeCircle(uv,p,r*0.33,lw,0.);colvec4(1)*segment(uv,vec2(p.x-r,p.y),vec2(p.xr,p.y),lw,0.);colvec4(1)*segment(uv,vec2(p.x,p.y-r),vec2(p.x,p.yr),lw,0.);float t2segment(uv,p,scan,lw,0.);float gradient0.;if (length(p2)r){float angle mod( theta - atan(p2.y, p2.x),PI2);gradient sqrt(clamp(1. - angle, 0., 1.)*0.5);}t2gradient t2;if(t20.){colvec4(color*t2,1.);} return col;
}void mainImage(out vec4 fragColor,vec2 fragCoord){vec2 uvprojectionCoord(fragCoord,1.);uv*2.; vec4 color vec4(0);// color.rgbvec3(1,0,0)*segment(uv,vec2(0,1.5),vec2(2.,1.5),0.4,0.2);colorripple(uv,vec2(-1.2,0),0.3,3.,mix(vec3(1.,0,0),vec3(1,0,1),abs(sin(time)))); colorscenery(uv,vec2(0),0.6,4.);colorring(uv,vec2(1.2,0),0.3,4.,mix(vec3(1.,1,0),vec3(0,1,1),abs(sin(time))));colorradar(uv,vec2(2.5,0),0.45,4.,vec3(1,0,1));fragColor color;}