canvas+webgl实现三维彩色点围成圆形扩散动画效果代码
代码语言:html
所属分类:三维
代码描述:canvas+webgl实现三维彩色点围成圆形扩散动画效果代码
代码标签: 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.title = "🤖"; document.body.innerHTML = ""; document.body.appendChild(canvas); document.body.style = "margin:0;touch-action:none;overflow:hidden;"; canvas.style.width = "100%"; canvas.style.height = "auto"; canvas.style.userSelect = "none"; const dpr = Math.max(1, .5 * 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) * * Adaptation of "Quasar" by @kishimisu * Source: https://www.shadertoy.com/view/msGyzc */ #ifdef GL_FRAGMENT_PRECISION_HIGH precision highp float; #else precision mediump float; #endif out vec4 fragColor; uniform vec2 resolution; uniform float time; uniform vec2 touch; uniform int pointerCount; #define mouse (touch/resolution) #define P pointerCount #define T (10.+time*.5) #define S smoothstep #define hue(a) (.6+.6*cos(6.3*(a)+vec3(0,23,21))) mat2 rot(float a) { float c = cos(a), s = sin(a); return mat2(c, -s, s, c); } float orbit(vec2 p, float s) { return floor(atan(p.x, p.y)*s+.5)/s; } void cam(inout vec3 p) { if (P > 0) { p.yz *= rot(mouse.y*acos(-1.)+acos(.0)); p.xz *= rot(-mouse.x*acos(-1.)*2.); } } void main(void) { vec2 uv = ( gl_FragCoord.xy-.5*resolution )/min(resolution.x, resolution.y); vec3 col = vec3(0), p = vec3(0), rd = normalize(vec3(uv, 1)); cam(p); cam(rd); const float steps = 30.; float dd = .0; for (float i=.0; i<steps; i++) { p.z -= 4.; p.xz *= rot(T*.2); p.yz *= rot(sin(T*.2)*.5); p.zx *= rot(orbit(p.zx, 12.)); float a = p.x; p.yx *= rot(orbit(p.yx, 2.)); float b = p.x-T; p.x = fract(b-.5)-.5; flo.........完整代码请登录后点击上方下载按钮下载查看
网友评论0