canvas丝绸织物布料上下波动起伏动画效果代码

代码语言:html

所属分类:动画

代码描述:canvas丝绸织物布料上下波动起伏动画效果代码

代码标签: canvas 丝绸 织物 布料 上下 波动 起伏 动画

下面为部分代码预览,完整代码请点击下载或在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
  #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

  mat2 rot(float a) {
    float c = cos(a), s = sin(a);
    return mat2(c, -s, s, c);
  }

  float smin(float a, float b, float k) {
      float h = clamp(
          .5+.5*(b-a)/k,
          .0,
          1.
      );

      return mix(b,a,h)-k*h*(1.-h);
  }

  float sabs(float a, float s) {
      return sqrt(a*a+s);
  }


  float disc(vec3 p, vec2 s, float r) {
      vec2 e = vec2(
        length(abs(p.xz)),
        abs(p.y)
      ) - s;

      return length(max(e, .0)) +
          min(.0, max(e.x, e.y)) - r;
  }

  float map(vec3 p) {
      p.x -= 3.*T;
      p.y += exp(1.+sin(p.x+T*5.2)*.1)*1.4;
      p.y -= sin(p.x*.8)*.8;
      p.y -= cos(.5*p.z)*.4;
      p.x = sabs(p.z, 1.);

      float d = disc(p, vec2(10, .25), .0);

      return smin(d, -(length(p)-1.5), -.5);
  }

  void cam(inout vec3 p) {
      p.yz *= rot(.35);
      p.xz *= rot(.5);
  }

  void main(void) {
      vec2 uv = (
          gl_FragCoord.xy -.5 * resolution
      ) / min(resolution.x,.........完整代码请登录后点击上方下载按钮下载查看

网友评论0