webgl实现canvas可交互的可爱泡泡碰撞融合代码

代码语言:html

所属分类:其他

代码描述:webgl实现canvas可交互的可爱泡泡碰撞融合代码

代码标签: webgl canvas 交互 可爱 泡泡 碰撞 融合 代码

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en" >

<head>
  <meta charset="UTF-8">
  
  
  
<style>
html, body {
    overflow: hidden;
    margin: 0;
    background-color: #f3f2f1;
}

canvas {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

.lil-gui {
    --width: 450px;
    max-width: 90%;
    --widget-height: 20px;
    font-size: 15px;
    --input-font-size: 15px;
    --padding: 10px;
    --spacing: 10px;
    --slider-knob-width: 5px;
    --background-color: rgba(5, 0, 15, .8);
    --widget-color: rgba(255, 255, 255, .3);
    --focus-color: rgba(255, 255, 255, .4);
    --hover-color: rgba(255, 255, 255, .5);

    --font-family: monospace;
}
</style>


  
</head>

<body>
  <canvas></canvas>

<script type="x-shader/x-fragment" id="vertShader">
    precision highp float;

    varying vec2 vUv;
    attribute vec2 a_position;

    void main () {
        vUv = .5 * (a_position + 1.);
        gl_Position = vec4(a_position, 0., 1.);
    }
</script>

<script type="x-shader/x-fragment" id="fragShaderSpeed">
    precision highp float;
    precision highp sampler2D;

    varying vec2 vUv;
    uniform sampler2D u_prev_frame_texture;
    uniform vec2 u_pointer_position;
    uniform float u_pointer_power;
    uniform vec2 u_delta_xy;
    uniform float u_ratio;
    uniform float u_speed_fade;


    #define TWO_PI 6.28318530718
    #define PI 3.14159265358979323846


    void main () {

        vec2 uv = vUv;

        vec2 pointer = u_pointer_position;
        pointer.x *= u_ratio;

        vec2 pointer_uv = uv;
        pointer_uv.x *= u_ratio;

        float pointer_dot = 1. - clamp(length(pointer_uv - pointer), 0., 1.);
        pointer_dot = pow(pointer_dot, 6.);
        pointer_dot *= u_pointer_power;

        vec3 back = texture2D(u_prev_frame_texture, uv).rgb;
        back *= u_speed_fade;
        back = mix(back, vec3(u_delta_xy, 0.), pointer_dot);

        gl_FragColor = vec4(back.xyz, 1.);
    }
</script>

<script type="x-shader/x-fragment" id="fragShaderOutput">
    precision highp float;
    precision highp sampler2D;

    varying vec2 vUv;
    uniform sampler2D u_image_texture;
    uniform sampler2D u_speed_texture;
    uniform float u_ratio;
    uniform float u_img_ratio;
    uniform float u_time;
    uniform float u_pointer_multiplier;

    #define TWO_PI 6.28318530718
    #define PI 3.14159265358979323846

    float random(vec2 co) {
        return fract(sin(dot(co.xy, vec2(12.9898, 78.233))) * 43758.5453);
    }

    float .........完整代码请登录后点击上方下载按钮下载查看

网友评论0