threejs打造三维能量球燃烧释放动画效果
代码语言:html
所属分类:三维
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link href="https://fonts.googleapis.com/css?family=Roboto+Mono&display=swap" rel="stylesheet"> <style> html, body { background: black; overflow: hidden; } .info { background-color: rgba(80, 80, 80, 0.2); bottom: 0; color: white; font-family: 'Roboto Mono', sans-serif; font-size: .8rem; padding: .5rem; position: absolute; } </style> </head> <body translate="no"> <canvas id="canvas"></canvas> <p class="info">drag / scroll mouse to rotate / zoom</p> <script src="https://mrdoob.github.com/three.js/examples/js/postprocessing/EffectComposer.js" cross-origin="anonymous"></script> <script type="x-shader/x-vertex" id="sphere-vert"> uniform float u_time; varying float v_noise; void main() { vec3 q = vec3(0.); v_noise = turbulence(vec4(position, u_time * .5) * .005); gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.); } </script> <script type="x-shader/x-fragment" id="sphere-frag"> #define TAU 6.283185307179586 uniform float u_time; varying float v_noise; void main() { vec3 color = vec3(0.); vec3 q = 1. - vec3( .9 * v_noise, .4 * v_noise, .3 * v_noise ); color = mix(q, vec3(.2, .3, .1), clamp(pow(v_noise, 2.) * 4., 0., 1.)); color = mix(color, vec3(.512, .461, .999), clamp(length(q), 0., 1.)); color *= (pow(v_noise, 3.) + .6 * pow(v_noise, 2.) + .5 * v_noise); gl_FragColor = vec4(color, 1.); } </script> <script type="x-shader/x-vertex" id="points-vert"> uniform float u_time; attribute vec3 color; attribute vec2 age; varying vec3 v_color; varying vec2 v_age; void main() { vec4 mvPosition = modelViewMatrix * vec4(position, 1.); vec3 velocity = (normalize(position) + noiseVel(position, u_time, .005, 4.)) * age.s; vec4 newPosition = vec4(position, 1.) + vec4(velocity, 0.); v_color = color; v_age = age; gl_PointSize = 100. * (100. / -mvPosition.z); gl_Position = projectionMatrix * modelViewMatrix * newPosition; } </script> <script type="x-shader/x-fragment" id="points-frag"> uniform sampler2D u_texture; varying vec3 v_color; varying vec2 v_age; float fadeInOut(float t, float m) { float h = .5 * m; return abs(mod((t + h), m) - h) / h; } void main() { float alpha = fadeInOut(v_age.s, v_age.t); gl_FragColor = vec4(v_color, alpha) * texture2D(u_texture, gl_PointCoord); } </script> <script type="x-shader" id="noise-util"> #define TAU 6.283185307179586 #define NUM_OCTAVES 6 float turbulence(vec4 st) { float value = 0.; float amp = 1.; for (int i = 0; i < NUM_OCTAVES; i++) { value += amp * abs(cnoise(st)); st *= 2.; amp *= .5; } return value; } vec3 noiseVel(vec3 st, float time, fl.........完整代码请登录后点击上方下载按钮下载查看
网友评论0