风火轮旋转动画特效

代码语言:html

所属分类:动画

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

    <title> - Radiation Vibe</title>
    <style>
        body {
            background-color: #000;
            margin: 0;
            overflow: hidden;
            background-repeat: no-repeat;
            display: flex;
            align-items: center;
            justify-content: center;
        }
    </style>

</head>
<body translate="no">
    <body>
        <canvas id="canvas"></canvas>
    </body>

    <script id=>
        var canvas = document.getElementById("canvas");
        canvas.width = Math.min(window.innerWidth, window.innerHeight);
        canvas.height = canvas.width;
        var gl = canvas.getContext("webgl");

        //Time
        var dt = 0.004;
        var time = 3.0;

        //************** Shader sources **************
        var vertexSource = `
        attribute vec2 position;
        void main() {
        gl_Position = vec4(position, 0.0, 1.0);
        }
        `;

        var fragmentSource = `
        #define PI 3.14159265358979323846
        precision highp float;

        uniform float width;
        uniform float height;
        vec2 resolution = vec2(width, height);
        uniform float time;

        vec2 rotate(vec2 _st, float _angle) {
        _st -= 0.5;
        _st =  mat2(cos(_angle),-sin(_angle), sin(_angle),cos(_angle)) * _st;
        _st.y += 0.5;
        _st.x += .5;
        return _st;
        }

        void main(){

        //set up positions and time
        vec2 uv = gl_FragCoord.xy/resolution.xy;
        float t = mod(time, 4.0*PI);
        t = t * sin(PI/5.0);
        vec2 pos = uv;
        pos = vec2(0.5, 0.5)-pos;

        //calculate distances and angles
        float d = length(pos);/*distance from center*/
        float id = 1.0 - d;/*inverse d, greater near the center*/
        float theta = -(atan(pos.y, pos.x));
        float rot = (2.0*PI*(id+1.0))*(t)+(6.0*theta);

        //rotate both positions
        pos = rotate(pos, -rot);
        uv = rotate(uv, -rot);

        //motion
        for(float i = 1.0; i < 12.0; i+=1.0){.........完整代码请登录后点击上方下载按钮下载查看

网友评论0