three+webgl实现鼠标互动鸟群粒子动画效果代码
代码语言:html
所属分类:粒子
代码描述:three+webgl实现鼠标互动鸟群粒子动画效果代码
代码标签: three webgl 鼠标 互动 鸟群 粒子 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> @import url("https://fonts.googleapis.com/css2?family=Asap&display=swap"); * { margin: 0; padding: 0; box-sizing: border-box; } html, body { overscroll-behavior-x: none; overscroll-behavior-y: none; } body { font-family: "Asap", sans-serif; position: relative; width: 100vw; min-height: 100vh; text-align: center; overflow-x: hidden; color: white; } canvas { -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; user-select: none; position: fixed; width: 100vw; height: 100vh; top: 0; left: 0; z-index: 0; } main { position: relative; } section { position: relative; width: 100vw; min-height: 100vh; display: flex; align-items: center; justify-content: center; } </style> </head> <body translate="no"> <main> <section> <div> <h1>title</h1> <p>contents</p> </div> </section> </main> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/es-module-shims.1.6.3.js"></script> <script type="importmap"> { "imports": { "three": "//repo.bfw.wiki/bfwrepo/js/module/three/build/162/three.module.js", "three/addons/": "//repo.bfw.wiki/bfwrepo/js/module/three/examples/162/jsm/" } } </script> <!-- shader for bird's position --> <script id="fragmentShaderPosition" type="x-shader/x-fragment"> uniform float time; uniform float delta; void main() { vec2 uv = gl_FragCoord.xy / resolution.xy; vec4 tmpPos = texture2D( texturePosition, uv ); vec3 position = tmpPos.xyz; vec3 velocity = texture2D( textureVelocity, uv ).xyz; float phase = tmpPos.w; phase = mod( ( phase + delta + length( velocity.xz ) * delta * 3. + max( velocity.y, 0.0 ) * delta * 6. ), 62.83 ); gl_FragColor = vec4( position + velocity * delta * 15. , phase ); } </script> <!-- shader for bird's velocity --> <script id="fragmentShaderVelocity" type="x-shader/x-fragment"> uniform float time; uniform float testing; uniform float delta; // about 0.016 uniform float separationDistance; // 20 uniform float alignmentDistance; // 40 uniform float cohesionDistance; // uniform float freedomFactor; uniform vec3 predator; const float width = resolution.x; const float height = resolution.y; const float PI = 3.141592653589793; const float PI_2 = PI * 2.0; // const float VISION = PI * 0.55; float zoneRadius = 40.0; float zoneRadiusSquared = 1600.0; float separationThresh = 0.45; float alignmentThresh = 0.65; const float UPPER_BOUNDS = BOUNDS; const float LOWER_BOUNDS = -UPPER_BOUNDS; const float SPEED_LIMIT = 7.0;//9.0; float rand( vec2 co ){ return fract( sin( dot( co.xy, vec2(12.9898,78.233) ) ) * 43758.5453 ); } void main() { zoneRadius = separationDistance + alignmentDistance + cohesionDistance; separationThresh = separationDistance / zoneRadius; alignmentThresh = ( separationDistance + alignmentDistance ) / zoneRadius; zoneRadiusSquared = zoneRa.........完整代码请登录后点击上方下载按钮下载查看
网友评论0