twgl+webgl实现无底洞隧道穿越动画效果代码
代码语言:html
所属分类:动画
代码描述:twgl+webgl实现无底洞隧道穿越动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> html { height: 100%; } body { background: #333; overflow: hidden; padding: 0; margin: 0; width: 100%; height: 100%; display: flex; align-items: center; } canvas { height: 100%; width: 100%; } </style> </head> <body translate="no"> <canvas id="canvas"></canvas> <!-- VertexShader code here --> <script id="vertexShader" type="x-shader/x-vertex">#version 300 es precision highp float; in vec4 position; void main() { gl_Position = vec4( position ); } </script> <!-- FragmentShader code here --> <script id="fragmentShader" type="x-shader/x-fragment">#version 300 es #if __VERSION__ < 130 #define TEXTURE2D texture2D #else #define TEXTURE2D texture #endif precision highp float; out vec4 fragColor; uniform vec2 u_resolution; uniform vec4 u_mouse; uniform float u_time; uniform sampler2D iChannel0; uniform sampler2D iChannel1; #define R u_resolution #define T u_time #define M u_mouse #define PI 3.14159265359 #define PI2 6.28318530718 mat2 rot(float a) {return mat2(cos(a),sin(a),-sin(a),cos(a));} vec3 hue(float t) { return .35 + .35*cos(PI2*t*(vec3(1.,.85,.75)+vec3(0.173,0.965,0.118)));} float hash21(vec2 a) {return fract(sin(dot(a,vec2(27.609,57.583)))*43758.5453);} float box(vec2 p, vec2 b) {vec2 d = abs(p)-b; return length(max(d,0.)) + min(max(d.x,d.y),0.);} void main() { vec2 F = gl_FragCoord.xy; vec3 C = vec3(0); vec2 uv = (2.*F-R.xy)/max(R.x,R.y); mat2 r90 = rot(1.5707); // polar warp uv *= rot(T*.095); uv = vec2(log(length(uv)), atan(uv.y, uv.x))*1.272; uv.x -= T*.25; float scale = 2., px = fwidth(uv.x*scale); vec2 p = uv; vec2 id = floor(p*scale); p = fract(p*scale)-.5; float rnd = hash21(id); // turn tiles if(rnd>.5) p *= r90; rnd=fract(rnd*32.54); if(rnd>.4) p *= r90; if(rnd>.8) p *= r90; // randomize hash for type rnd=fract(rnd*47.13); float tk = .06; // kind of messy and long winded float d = box(p-vec2(.6,.7),vec2(.25,.75))-.15; float l = box(p-vec2(.7,.5),vec2(.75,.15))-.15; float b = box(p+vec2(0,.7),vec2(.05,.25))-.15; float r = box(p+vec2(.6,0),vec2(.15,.05))-.15; d = abs(d)-tk; if(rnd>.92) { d = box(p-vec2(-.6,.5),vec2(.25,.15))-.15; l = box(p-vec2(.6,.6),vec2(.25,.25))-.15; b = box(p+vec2(.6,.6),vec2(.25,.25))-.15; .........完整代码请登录后点击上方下载按钮下载查看
网友评论0