ogl+webgl实现逼真水滴变形动画效果代码
代码语言:html
所属分类:动画
代码描述:ogl+webgl实现逼真水滴变形动画效果代码
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/ogl.umd.js"></script> </head> <body class="demo-1"> <script type="module"> const imgSize = [1250, 833]; const vertex = ` attribute vec2 uv; attribute vec2 position; varying vec2 vUv; void main() { vUv = uv; gl_Position = vec4(position, 0, 1); } `; const fragment = ` precision highp float; precision highp int; uniform sampler2D tWater; uniform sampler2D tFlow; uniform float uTime; varying vec2 vUv; uniform vec4 res; void main() { // R and G values are velocity in the x and y direction // B value is the velocity length vec3 flow = texture2D(tFlow, vUv).rgb; vec2 uv = .5 * gl_FragCoord.xy / res.xy ; vec2 myUV = (uv - vec2(0.5))*res.zw + vec2(0.5); myUV -= flow.xy * (0.15 * 0.7); vec3 tex = texture2D(tWater, myUV).rgb; gl_FragColor = vec4(tex.r, tex.g, tex.b, 1.0); } `; { const renderer = new ogl.Renderer({ dpr: 2 }); const gl = renderer.gl; document.body.appendChild(gl.canvas); // Variable inputs to control flowmap let aspect = 1; const mouse = new ogl.Vec2(-1); const velocity = new ogl.Vec2(); function resize() { let a1, a2; var imageAspect = imgSize[1] / imgSize[0]; if (window.innerHeight / window.innerWidth < imageAspect) { a1 = 1; a2 = window.innerHeight / window.innerWidth / imageAspect; } else { a1 = (window.innerWidth / window.innerHeight) * imageAspect; a2 = 1; } mesh.program.uniforms.res.value = new ogl.Vec4( window.innerWidth, window.innerHeight, a1, a2 ); renderer.setSize(window.innerWidth, window.innerHeight); aspect = window.innerWidth / window.innerHeight; } const flowmap = new ogl.Flowmap(gl); // Triangle that includes -1 to 1 range for 'position', and 0 to 1 range for 'uv'. const geometry = new ogl.Geometry(gl, { position: { size: 2, data: new Float32Array([-1, -1, 3, -1, -1, 3]) }, uv: { size: 2, data: new Float32Array([0, 0, 2, 0, 0, 2]) } }); const texture = new ogl.Texture(gl, { minFilter: gl.LINEAR, magFilter: gl.LINEAR }); const img = new Image(); img.onload = () => (texture.image = img); img.crossOrigin = "Anonymous"; img.src = "//repo.bfw.wiki/bfwrepo/image/63834ab5a48ae.png"; let a1, a2; var imageAspect = imgSize[1] / imgSize[0]; if (window.innerHeight / window.innerWidth < imageAspect) { a1 = 1; a2 = window.i.........完整代码请登录后点击上方下载按钮下载查看
网友评论0