canvas+webgl实现无尽之门穿越动画效果代码
代码语言:html
所属分类:动画
代码描述:canvas+webgl实现无尽之门穿越动画效果代码,无穷无尽的门空间穿越。
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> </head> <body > <script > const canvas = document.createElement("canvas"); const gl = canvas.getContext("webgl2"); document.body.innerHTML = ""; document.body.appendChild(canvas); document.body.style = "margin: 0;overflow: hidden;"; canvas.style.width = "100%"; canvas.style.height = "auto"; const dpr = window.devicePixelRatio; function resize() { const { innerWidth: width, innerHeight: height } = window; canvas.width = width * dpr; canvas.height = height * dpr; gl.viewport(0, 0, width * dpr, height * dpr); } window.onresize = resize; const vertexSource = `#version 300 es #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #else precision mediump float; #endif in vec4 position; void main(void) { gl_Position = position; } `; const fragmentSource = `#version 300 es /********* * made by Matthias Hurrle (@atzedent) */ #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #else precision mediump float; #endif out vec4 fragColor; uniform vec2 resolution; uniform float time; #define T time #define S smoothstep float box(vec3 p, vec3 s, float r) { p = abs(p)-s; return length(max(p,.0))+ min(.0,max(max(p.x,p.y),p.z))-r; } float map(vec3 p) { p.y += sin(p.z*.2-.6)*1.25; p.x -= sin(p.z*.125+.05)*4.; return -box(p, vec3(1,1.65,20), .05); } void main(void) { vec2 uv = ( gl_FragCoord.xy -.5 * resolution ) / min(resolution.x, resolution.y); vec3 col = vec3(0), rd = normalize(vec3(uv,1)), p = vec3(1,0,0); const float steps = 400.; for (float i=.0; i<ste.........完整代码请登录后点击上方下载按钮下载查看
网友评论0