Skip to content

Instantly share code, notes, and snippets.

@neauoire
Last active October 20, 2021 17:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save neauoire/35430ac93f2c5916e201 to your computer and use it in GitHub Desktop.
Save neauoire/35430ac93f2c5916e201 to your computer and use it in GitHub Desktop.
<script>
function test(){
d=document;
d.body.appendChild(c=d.createElement("canvas"));
g=c.getContext("webgl")||c.getContext("experimental-webgl");
sp=g.createProgram();
function gs(t,s){
g.shaderSource(t=g.createShader(t),s);
g.compileShader(t);g.attachShader(sp,t);
}
var camera_ori_y = "120.";
var camera_ori_x = "120."; // default: 120.
var direction_x = "5.";
var direction_y = "5.";
var direction_z = "I.x*30.2434216"; // forward speed // default: 20
var spin = "(I.x / p.z)"; // default: sin(I.x*.01)*.2
var r = "((((I.x*1.15*sin(I.x))*3.276))*0.007)+0.0001432"; // (tan((I.x*1.15*sin(I.x))*3.176)*P.z)*0.007
var s = "(3.4312-tan(I.x*((I.x)/.41))+1.05)-0.0001234"; // 3.4312-cos(I.x*2.1)+0.05
var r2 = "((((tan(I.x)*1.05*tan(I.x))*2.176))*0.007)-0.00001"; // sin((I.x+float(i)*0.0001*sin(I.x*.01))*3.176)*(0.3)+0.5
var s2 = "9.14312-cos(I.x+(tan(I.x)/.4))+0.105"; // 3.4312-sin(I.x*200.1)+(I.x)*sin(float(i))+0.5
var occ = "1.+(D(p+n*.02+Q(-e,0,0))+D(p+n*.02+Q(+e,0,0))+D(p+n*.02+Q(0,-e,0))+D(p+n*.02+Q(0,e,0))+D(p+n*.02+Q(0,0,-e))+D(p+n*.02+Q(0,0,e))-.03)*20.";
var br = "(pow(clamp(dot(n,-normalize(d+Q(.3,.3,.3)))*.6+.4, 0.,1.),1.7)*.8+.2)*occ/(td*.5+1.)";
var fog = "clamp(3./(td*td*1.8+.4),0.,1.)";
var color = "br/(td+1.),br/(td+1.),br/(td+1.)";
// Main
var vec_f = "vec2 f=gl_FragCoord.xy;";
var q_d = "Q d=Q((f-vec2("+camera_ori_y+","+camera_ori_x+"))/"+camera_ori_x+",1.);";
var q_c = "Q c=pow(R(Q("+direction_x+","+direction_y+","+direction_z+"),normalize(d*Q(1.,1.,1.-(length(d.xy)*.54)))),Q(.5,.5,.5));";
var gl_FragColor = "gl_FragColor=vec4(pow(floor(c*Q(8.,8.,8.)+fract(f.x/4.+f.y/2.)/2.)/(Q(7.,7.,7.)),Q(1.5,1.5,1.5)),1.);";
var program = "precision mediump float;uniform vec4 I;Q Z(Q p,float a){return Q(cos(a)*p.y+sin(a)*p.x,cos(a)*p.x-sin(a)*p.y,p.z);}float F(Q P){float R="+r+",S="+s+";vec4 p=vec4(P,1),o=p,s=vec4(S,S,S,abs(S))/R;for(int i=0;i<10;i++){if(i==3||i==7)R="+r2+",S="+s2+";p.xyz=clamp(p.xyz,-.5,2.)*2.-p.xyz;float r2=dot(p.xyz,p.xyz);if(r2>10000.)break;p=p*clamp(max(R/r2,R)*cos(I.x),0.,1.)*s+o;}return((length(p.xyz)-abs(S-1.))/p.w-pow(abs(S),float(1-24)));}float D(Q p){Q c=Q(10.,10.,8.);p=mod(p,c)-.5*c;Q q=abs(Z(p,p.z*3.1415/20.*4.));float d2=max(q.z-10.,max((q.x*0.866025+q.y*0.5),q.y)-.01);p=Z(p,p.z*3.1415/10.*(length(p.xy)-3.)*"+spin+");return max(F(p),-d2);}Q R(Q p,Q d){float td=0.,rd=0.;for(int i=0;i<80;i++){if((rd=D(p))<pow(td,1.5)*.004)break;td+=rd;p+=d*rd;}float md=D(p),e=.0025;Q n=normalize(Q(D(p+Q(e,0,0))-D(p-Q(e,0,0)),D(p+Q(0,e,0))-D(p-Q(0,e,0)),D(p+Q(0,0,e))-D(p-Q(0,0,e))));e*=.5;float occ="+occ+";occ=clamp(occ,0.,1.);float br="+br+";float fog="+fog+";return mix(Q("+color+"),Q(0.,0.,0.),1.-fog);}void main(void){"+vec_f+" "+q_d+" "+q_c+" "+gl_FragColor+"}";
gs(35633,"attribute vec2 P;void main(void){gl_Position=vec4(P,0.,1.);}");
gs(35632,program.split("Q").join("vec3"));
g.linkProgram(sp);g.useProgram(sp);
g.bindBuffer(34962,g.createBuffer());
g.bufferData(34962,new Float32Array([i=-1,i,i,1,1,i,1,1]),35044);
g.vertexAttribPointer(0,2,5126,0,0,0);
g.enableVertexAttribArray(0);
(u=function(t){W=innerWidth;H=innerHeight;s=(H/240)|0;g.viewport(0,0,w=c.width=426,h=c.height=240);c.style.cssText="position:fixed;width:"+(w*=s)+"px;height:"+(h*=s)+"px;left:"+((W-w)/2)+"px;top:"+((H-h)*.3)+"px;image-rendering:-moz-crisp-edges;image-rendering:-webkit-optimize-contrast;image-rendering:-o-crisp-edges;image-rendering:pixelated;-ms-interpolation-mode:nearest-neighbor";g.uniform4f(g.getUniformLocation(sp,"I"),(t-30000)*.00002,0,0,0);g.drawArrays(5,0,4);requestAnimationFrame(u);
})(0);
}
</script>
<body style="background-color: #000" onload='test()'></body>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment