首页 > 软件开发 > HTML >

HTML5 Canvas水面下太阳特效

来源:互联网 2023-03-16 19:11:01 424

HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

工具/原料

  • adobe dreamweaver

方法/步骤

  • 1

    新建html文档。xOj办公区 - 实用经验教程分享!

    HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

  • 1该信息未经授权抓取自百度经验
  • 2

    书写hmtl代码。xOj办公区 - 实用经验教程分享!

    div id="container">/div>xOj办公区 - 实用经验教程分享!

    div>HTML5 Canvas水面下太阳特效-适用于高版本浏览器/div>xOj办公区 - 实用经验教程分享!

    HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

  • 3

    书写css代码。xOj办公区 - 实用经验教程分享!

    style>xOj办公区 - 实用经验教程分享!

    body {xOj办公区 - 实用经验教程分享!

    margin: 0;xOj办公区 - 实用经验教程分享!

    padding: 0;xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    #container {xOj办公区 - 实用经验教程分享!

    position: fixed;xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    /style>xOj办公区 - 实用经验教程分享!

    HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

  • 4

    书写并添加js代码。xOj办公区 - 实用经验教程分享!

    script src="js/three.min.js">/script>xOj办公区 - 实用经验教程分享!

    script id="vertexShader" type="x-shader/x-vertex">xOj办公区 - 实用经验教程分享!

    void main() {xOj办公区 - 实用经验教程分享!

    gl_Position = vec4( position, 1.0 );xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    /script>xOj办公区 - 实用经验教程分享!

    script id="fragmentShader" type="x-shader/x-fragment">xOj办公区 - 实用经验教程分享!

    uniform vec2 u_resolution;xOj办公区 - 实用经验教程分享!

    uniform float u_time;xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    const float NOISE_SIZE = 3.; // The size of the noise. Essentially the multiplier for the noise UV. Smaller = biggerxOj办公区 - 实用经验教程分享!

    const float INTENSITY = 20.; // The intensity of the displacementxOj办公区 - 实用经验教程分享!

    const float REFLECTION_INTENSITY = 4.; // The intensity of the rellowish reflections.xOj办公区 - 实用经验教程分享!

    const int octaves = 2; // the number of octaves to generate in the FBM noisexOj办公区 - 实用经验教程分享!

    const float seed = 43758.5453123; // A random seed :)xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    vec2 random2(vec2 st, float seed){xOj办公区 - 实用经验教程分享!

    st = vec2( dot(st,vec2(127.1,311.7)),xOj办公区 - 实用经验教程分享!

    dot(st,vec2(269.5,183.3)) );xOj办公区 - 实用经验教程分享!

    return -1.0 2.0*fract(sin(st)*seed);xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    float noise(vec2 st, float seed) {xOj办公区 - 实用经验教程分享!

    vec2 i = floor(st);xOj办公区 - 实用经验教程分享!

    vec2 f = fract(st);xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    vec2 u = f*f*(3.0-2.0*f);xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    return mix( mix( dot( random2(i vec2(0.0,0.0), seed ), f - vec2(0.0,0.0) ),xOj办公区 - 实用经验教程分享!

    dot( random2(i vec2(1.0,0.0), seed ), f - vec2(1.0,0.0) ), u.x),xOj办公区 - 实用经验教程分享!

    mix( dot( random2(i vec2(0.0,1.0), seed ), f - vec2(0.0,1.0) ),xOj办公区 - 实用经验教程分享!

    dot( random2(i vec2(1.0,1.0), seed ), f - vec2(1.0,1.0) ), u.x), u.y);xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    float fbm1(in vec2 _st, float seed) {xOj办公区 - 实用经验教程分享!

    float v = 0.0;xOj办公区 - 实用经验教程分享!

    float a = 0.5;xOj办公区 - 实用经验教程分享!

    vec2 shift = vec2(100.0);xOj办公区 - 实用经验教程分享!

    // Rotate to reduce axial biasxOj办公区 - 实用经验教程分享!

    mat2 rot = mat2(cos(0.5), sin(0.5),xOj办公区 - 实用经验教程分享!

    -sin(0.5), cos(0.50));xOj办公区 - 实用经验教程分享!

    for (int i = 0; i octaves; i) {xOj办公区 - 实用经验教程分享!

    v = a * noise(_st, seed);xOj办公区 - 实用经验教程分享!

    _st = rot * _st * 2.0 shift;xOj办公区 - 实用经验教程分享!

    a *= 0.4;xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    return v .4;xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    float pattern(vec2 uv, float seed, float time, inout vec2 q, inout vec2 r) {xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    q = vec2( fbm1( uv vec2(0.0,0.0), seed ),xOj办公区 - 实用经验教程分享!

    fbm1( uv vec2(5.2,1.3), seed ) );xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    r = vec2( fbm1( uv 4.0*q vec2(1.7 - time / 2.,9.2), seed ),xOj办公区 - 实用经验教程分享!

    fbm1( uv 4.0*q vec2(8.3 - time / 2.,2.8), seed ) );xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    float rtn = fbm1( uv 4.0*r, seed );xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    return rtn;xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    mat2 rotate(float angle) {xOj办公区 - 实用经验教程分享!

    return mat2(cos(angle), -sin(angle), sin(angle), cos(angle));xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    void main() {xOj办公区 - 实用经验教程分享!

    vec2 uv = (gl_FragCoord.xy - 0.5 * u_resolution.xy) / u_resolution.y;xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    // Generate our displacement mapxOj办公区 - 实用经验教程分享!

    vec2 _uv = uv * NOISE_SIZE;xOj办公区 - 实用经验教程分享!

    vec2 q = vec2(0.);xOj办公区 - 实用经验教程分享!

    vec2 r = vec2(0.);xOj办公区 - 实用经验教程分享!

    float pattern = pattern(_uv, seed, u_time/2., q, r);xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    uv = (.5 - pattern) / INTENSITY; // modulate the main UV coordinates by the patternxOj办公区 - 实用经验教程分享!

    // uv -= .5 / INTENSITY; // This just recenters the UV coords after the distortionxOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    float len = length(uv) .01;xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    float field = len 0.05*(-1.0*u_time / 5.); // The distance field from the middle to the edgexOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    float ripple;xOj办公区 - 实用经验教程分享!

    ripple = sin(field*80.0) * .5 * r.x * pattern 1.; // The ripple patternxOj办公区 - 实用经验教程分享!

    ripple = smoothstep(0.2,.0,len); // Adding a core gradient to the sun. Essentially this is just a smoothed version of the distance fieldxOj办公区 - 实用经验教程分享!

    ripple *= smoothstep(0.3,.9,clamp(1. - len * 1.5,0.0,1.0)); // Vignette the sun, making it smaller than infinityxOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    ripple -= fract(ripple * 8.) / 100.; // Adds a nice sort of reflective elementxOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    vec3 colour = vec3(.2, .3, .4); // the basic colourxOj办公区 - 实用经验教程分享!

    colour = ripple * length(r) * vec3(1., 1., .8); // ripple times sun colourxOj办公区 - 实用经验教程分享!

    colour = (1. - pattern * REFLECTION_INTENSITY * .5) * smoothstep(0.0,.7,clamp(1. - len * 1.5,0.0,1.0)) * vec3(-.2, -.1, 0.); // vignette and reflectionxOj办公区 - 实用经验教程分享!

    colour = (1. - pattern * REFLECTION_INTENSITY * 2.) * smoothstep(0.5,.9,clamp(1. - len * 1.5,0.0,1.0)) * vec3(-.2, -.1, 0.); // vignette and reflection 2 - this is essentially a more intense, but reduced radius version of the previous one.xOj办公区 - 实用经验教程分享!

    xOj办公区 - 实用经验教程分享!

    gl_FragColor = vec4(colour, 1.);xOj办公区 - 实用经验教程分享!

    }xOj办公区 - 实用经验教程分享!

    /script>xOj办公区 - 实用经验教程分享!

    HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

  • 5

    代码整体结构。xOj办公区 - 实用经验教程分享!

    HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

  • 6

    查看效果。xOj办公区 - 实用经验教程分享!

    HTML5 Canvas水面下太阳特效xOj办公区 - 实用经验教程分享!

  • 以上方法由办公区教程网编辑摘抄自百度经验可供大家参考!xOj办公区 - 实用经验教程分享!


    标签: HTML

    办公区 Copyright © 2016-2023 www.bgqu.net. Some Rights Reserved. 备案号:湘ICP备2020019561号统计代码