特效描述:html5 canvas水墨风格 云雾动画特效。html5 canvas云雾动画、水墨云雾特效

代码结构

1. 引入JS

2. HTML代码

//

// GLSL textureless classic 3D noise "cnoise",

// with an RSL-style periodic variant "pnoise".

// Author: Stefan Gustavson ([email protected])

// Version: 2011-10-11

//

// Many thanks to Ian McEwan of Ashima Arts for the

// ideas for permutation and gradient selection.

//

// Copyright (c) 2011 Stefan Gustavson. All rights reserved.

// Distributed under the MIT license. See LICENSE file.

// https://github.com/ashima/webgl-noise

//

vec3 mod289(vec3 x)

{

return x - floor(x * (1.0 / 289.0)) * 289.0;

}

vec4 mod289(vec4 x)

{

return x - floor(x * (1.0 / 289.0)) * 289.0;

}

vec4 permute(vec4 x)

{

return mod289(((x*34.0)+1.0)*x);

}

vec4 taylorInvSqrt(vec4 r)

{

return 1.79284291400159 - 0.85373472095314 * r;

}

vec3 fade(vec3 t) {

return t*t*t*(t*(t*6.0-15.0)+10.0);

}

// Classic Perlin noise

float cnoise(vec3 P)

{

vec3 Pi0 = floor(P); // Integer part for indexing

vec3 Pi1 = Pi0 + vec3(1.0); // Integer part + 1

Pi0 = mod289(Pi0);

Pi1 = mod289(Pi1);

vec3 Pf0 = fract(P); // Fractional part for interpolation

vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0

vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);

vec4 iy = vec4(Pi0.yy, Pi1.yy);

vec4 iz0 = Pi0.zzzz;

vec4 iz1 = Pi1.zzzz;

vec4 ixy = permute(permute(ix) + iy);

vec4 ixy0 = permute(ixy + iz0);

vec4 ixy1 = permute(ixy + iz1);

vec4 gx0 = ixy0 * (1.0 / 7.0);

vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;

gx0 = fract(gx0);

vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);

vec4 sz0 = step(gz0, vec4(0.0));

gx0 -= sz0 * (step(0.0, gx0) - 0.5);

gy0 -= sz0 * (step(0.0, gy0) - 0.5);

vec4 gx1 = ixy1 * (1.0 / 7.0);

vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;

gx1 = fract(gx1);

vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);

vec4 sz1 = step(gz1, vec4(0.0));

gx1 -= sz1 * (step(0.0, gx1) - 0.5);

gy1 -= sz1 * (step(0.0, gy1) - 0.5);

vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);

vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);

vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);

vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);

vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);

vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);

vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);

vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);

vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));

g000 *= norm0.x;

g010 *= norm0.y;

g100 *= norm0.z;

g110 *= norm0.w;

vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));

g001 *= norm1.x;

g011 *= norm1.y;

g101 *= norm1.z;

g111 *= norm1.w;

float n000 = dot(g000, Pf0);

float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));

float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));

float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));

float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));

float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));

float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));

float n111 = dot(g111, Pf1);

vec3 fade_xyz = fade(Pf0);

vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);

vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);

float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);

return 2.2 * n_xyz;

}

// Classic Perlin noise, periodic variant

float pnoise(vec3 P, vec3 rep)

{

vec3 Pi0 = mod(floor(P), rep); // Integer part, modulo period

vec3 Pi1 = mod(Pi0 + vec3(1.0), rep); // Integer part + 1, mod period

Pi0 = mod289(Pi0);

Pi1 = mod289(Pi1);

vec3 Pf0 = fract(P); // Fractional part for interpolation

vec3 Pf1 = Pf0 - vec3(1.0); // Fractional part - 1.0

vec4 ix = vec4(Pi0.x, Pi1.x, Pi0.x, Pi1.x);

vec4 iy = vec4(Pi0.yy, Pi1.yy);

vec4 iz0 = Pi0.zzzz;

vec4 iz1 = Pi1.zzzz;

vec4 ixy = permute(permute(ix) + iy);

vec4 ixy0 = permute(ixy + iz0);

vec4 ixy1 = permute(ixy + iz1);

vec4 gx0 = ixy0 * (1.0 / 7.0);

vec4 gy0 = fract(floor(gx0) * (1.0 / 7.0)) - 0.5;

gx0 = fract(gx0);

vec4 gz0 = vec4(0.5) - abs(gx0) - abs(gy0);

vec4 sz0 = step(gz0, vec4(0.0));

gx0 -= sz0 * (step(0.0, gx0) - 0.5);

gy0 -= sz0 * (step(0.0, gy0) - 0.5);

vec4 gx1 = ixy1 * (1.0 / 7.0);

vec4 gy1 = fract(floor(gx1) * (1.0 / 7.0)) - 0.5;

gx1 = fract(gx1);

vec4 gz1 = vec4(0.5) - abs(gx1) - abs(gy1);

vec4 sz1 = step(gz1, vec4(0.0));

gx1 -= sz1 * (step(0.0, gx1) - 0.5);

gy1 -= sz1 * (step(0.0, gy1) - 0.5);

vec3 g000 = vec3(gx0.x,gy0.x,gz0.x);

vec3 g100 = vec3(gx0.y,gy0.y,gz0.y);

vec3 g010 = vec3(gx0.z,gy0.z,gz0.z);

vec3 g110 = vec3(gx0.w,gy0.w,gz0.w);

vec3 g001 = vec3(gx1.x,gy1.x,gz1.x);

vec3 g101 = vec3(gx1.y,gy1.y,gz1.y);

vec3 g011 = vec3(gx1.z,gy1.z,gz1.z);

vec3 g111 = vec3(gx1.w,gy1.w,gz1.w);

vec4 norm0 = taylorInvSqrt(vec4(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110)));

g000 *= norm0.x;

g010 *= norm0.y;

g100 *= norm0.z;

g110 *= norm0.w;

vec4 norm1 = taylorInvSqrt(vec4(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111)));

g001 *= norm1.x;

g011 *= norm1.y;

g101 *= norm1.z;

g111 *= norm1.w;

float n000 = dot(g000, Pf0);

float n100 = dot(g100, vec3(Pf1.x, Pf0.yz));

float n010 = dot(g010, vec3(Pf0.x, Pf1.y, Pf0.z));

float n110 = dot(g110, vec3(Pf1.xy, Pf0.z));

float n001 = dot(g001, vec3(Pf0.xy, Pf1.z));

float n101 = dot(g101, vec3(Pf1.x, Pf0.y, Pf1.z));

float n011 = dot(g011, vec3(Pf0.x, Pf1.yz));

float n111 = dot(g111, Pf1);

vec3 fade_xyz = fade(Pf0);

vec4 n_z = mix(vec4(n000, n100, n010, n110), vec4(n001, n101, n011, n111), fade_xyz.z);

vec2 n_yz = mix(n_z.xy, n_z.zw, fade_xyz.y);

float n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x);

return 2.2 * n_xyz;

}

float turbulence( vec3 p ) {

float w = 100.0;

float t = -.5;

for (float f = 1.0 ; f <= 10.0 ; f++ ){

float power = pow( 2.0, f );

t += abs( pnoise( vec3( power * p ), vec3( 10.0, 10.0, 10.0 ) ) / power );

}

return t;

}

// START

uniform float time;

varying vec2 vUv;

varying vec3 vNormal;

varying vec3 newPosition;

varying float noise;

#define PHONG

varying vec3 vViewPosition;

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

void main() {

#include

#include

#include

#include

#include

#include

#include

#include

#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED

vNormal = normalize( transformedNormal );

#endif

#include

#include

#include

#include

#include

#include

#include

vViewPosition = - mvPosition.xyz;

#include

#include

#include

#include

vUv = uv;

noise = turbulence( 0.0050 * position + normal * (sin(time/2.) * 2.2));

vec3 displacement = vec3( (position.x ) * noise , position.y * noise ,position.z );

newPosition = position + turbulence(position * normal * (time / 20.)) + displacement ;

gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition , 1.0 );

}

#define PHONG

// START

uniform vec3 diffuse;

uniform vec3 emissive;

uniform vec3 specular;

uniform float shininess;

uniform float opacity;

uniform float time;

varying vec2 vUv;

varying vec3 newPosition;

varying float noise;

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

void main() {

#include

vec3 color = vec3( vUv * ( 1. - 2. * noise ), 1.0 );

vec4 finalColors = vec4( color.b * 1. ,color.g * 2. , color.b * 3. , 1.0 );

vec4 diffuseColor = vec4( finalColors );

ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );

vec3 totalEmissiveRadiance = emissive;

#include

#include

#include

#include

#include

#include

#include

#include

#include

// accumulation

#include

#include

// modulation

#include

vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;

#include

gl_FragColor = vec4( outgoingLight, diffuseColor.a );

#include

#include

#include

#include

}

// Shaders

var vertShader = document.querySelector('#vertexshader').innerHTML;

var fragShader = document.querySelector('#fragmentshader').innerHTML;

// Renderer

var renderer = new THREE.WebGLRenderer({canvas:document.getElementById('main'),antialiasing:true});

renderer.setClearColor(0x000000);

renderer.setSize(window.innerWidth,window.innerHeight);

// Camera

var camera = new THREE.PerspectiveCamera( 55, window.innerWidth / window.innerHeight, 0.1, 5000 );

camera.position.z = 100;

// Scene

var scene = new THREE.Scene();

// Light

var light = new THREE.DirectionalLight(0xffffff,0.3);

light.position.z = 200;

light.position.x = 100;

light.position.y = 100;

scene.add(light);

// Shader Materials

const uniforms = THREE.UniformsUtils.merge([

THREE.UniformsLib["ambient"],

THREE.UniformsLib["lights"],

{time: { type: "f", value: 0 }},

THREE.ShaderLib.phong.uniforms

]);

var material = new THREE.ShaderMaterial( {

uniforms:uniforms,

vertexShader : vertShader,

fragmentShader : fragShader,

lights:true

} );

var geometry = new THREE.SphereGeometry( 30,200,200);

var planet = new THREE.Mesh( geometry, material );

scene.add( planet );

planet.position.x = 0;

planet.position.y = 0;

planet.position.z = 0;

planet.modifier = Math.random();

planet.material.transparent = true;

planet.material.opacity = 1*Math.random();

// Render

var start = Date.now();

function render(){

uniforms.time.value = .00005 * ( Date.now() - start );

planet.rotation.y = 1;

planet.rotation.x = 1;

camera.position.x = 10;

camera.position.z = 42;

camera.rotation.z = -0.2;

renderer.render(scene,camera);

window.requestAnimationFrame(render);

}

window.requestAnimationFrame(render);

html5水墨效果,html5 canvas水墨风格的云雾动画特效相关推荐

  1. 粒子背景php,html5+canvas圆形粒子移动背景动画特效

    html5+canvas圆形粒子移动背景动画特效 this.update = function () { var lastPoint = { x: _this.x, y: _this.y }; // ...

  2. html圆点跟链接线,html5 canvas简洁的圆点线动画特效

    特效描述:html5 canvas简洁的 圆点线动画特效.html5 canvas绘制简洁动画特效,圆点和线条连接的背景动画特效. 代码结构 1. HTML代码 在美国的研究 我们一起可以在学术界产生 ...

  3. android气球上升的属性动画,html5 canvas告白气球上升背景动画特效

    特效描述:html5 canvas 告白气球上升 背景动画特效.html5基于canvas绘制各种卡通气球上升动画.告白气球背景动画特效. 代码结构 1. 引入JS 2. HTML代码 Balloon ...

  4. 火箭月亮html5游戏,HTML5 svg和CSS3炫酷火箭升空动画特效

    这是一款HTML5 svg和CSS3炫酷火箭升空动画特效.该特效的火箭使用SVG来实现,并通过CSS3动画来实现火箭的动画特效. 使用方法 HTML结构 CSS样式 body { background ...

  5. Canvas 3D球形文字云动画特效

    Canvas 3D球形文字云动画特效 Canvas 3D球形文字云动画特效 效果图: 代码如下,复制即可使用: (适用浏览器:360.FireFox.Chrome.Opera.傲游.搜狗.世界之窗. ...

  6. html5 canvas爆炸,html5 canvas彩色爆炸的小球动画特效

    特效描述:html5 canvas 彩色爆炸 小球动画特效.html5 canvas特效,有中心向四周爆炸的彩色小球,有开始和暂停按钮 代码结构 1. HTML代码 开始运动 停止运动 var can ...

  7. html5钻石,html5 canvas发光的钻石背景动画特效

    特效描述:html5canvas 发光的钻石 背景动画特效.html5 canvas three.js绘制闪烁的钻石背景动画,跟随鼠标移动改变形状效果. 代码结构 1. 引入JS 2. HTML代码 ...

  8. 五十个html js特效动画,html5 canvas酷炫的月食动画特效

    特效描述:html5 canvas 月食动画特效.html5月食动画 代码结构 1. 引入JS 2. HTML代码 varying vec3 vNormal; void main() { vNorma ...

  9. 表白html特效在线,html5 canvas酷炫表白爱心动画特效

    特效描述:酷炫表白动画 表白爱心动画 动画特效.html5爱心动画 代码结构 1. 引入JS 2. HTML代码 var container; var camera, scene, renderer; ...

  10. logo像闪电的html编译器,基于Html5 Canvas绘制逼真的闪电动画特效

    Canvas绘制闪电动画特效 canvas, body{ padding: 0; margin: 0; overflow: hidden; } var width, height var step = ...

最新文章

  1. PCL、XPS转换成PDF的控件activePDF Meridian​
  2. 微信小程序-豆瓣电影TOP250
  3. 原来带有python又装了一个anaconda有影响吗_anaconda python环境与原有python环境的坑...
  4. RuntimeError: Model class cmdb.models.UserInfo doesn't declare an explicit app_label
  5. linux内核优化策略,linux系统调优小结
  6. python arp_用Python构造ARP请求、扫描、欺骗
  7. tomcat的localhost_access_log日志文件
  8. 【HIHOCODER 1133】 二分·二分查找之k小数
  9. 高校舆情分析python_微博的高校舆情监控系统设计
  10. 网站制作教程:如何建设自己的网站?
  11. NYoj21 三个水杯
  12. 集中式版本控制器和分布式版本控制器的个人理解
  13. 十大知识领域 5大管理过程 47个子过程
  14. android 苹果电脑底部图标滚动效果,JS实现仿苹果底部任务栏菜单效果代码
  15. MyBatis一对多,多对一,多对多
  16. 2021-05-03
  17. Centos7安装网易云播放器
  18. leetcode 507 完美数
  19. 应用安全系列之二十三:SSRF
  20. 如何把灰色的图片背景换成白底图?

热门文章

  1. python 之 del() 函数
  2. 自下而上分析方法-算符优先,LR(0),SLR,LR(1),LALR大全
  3. 微信小程序列表图片加载错误处理
  4. linux 如何解压z01文件
  5. 摄影构图学83年绝版_学摄影练实操 2020年昆明市统战系统宣传工作业务培训班继续进行...
  6. Chuck语言学习笔记——0.前言:我为什么要学习这门语言
  7. 和生活一起理解51单片机① 如何入门学习单片机
  8. 高仿腾讯QQ即时通讯IM项目
  9. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】
  10. HBuilder开发App教程