kgl实现的玻璃体流体发散动画效果
代码语言:html
所属分类:粒子
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Instancing Box & Curl Noise</title>
<style>
html,
body {
height: 100%;
}
body {
overflow: hidden;
margin: 0;
}
canvas {
width: 100%;
height: 100%;
}
</style>
</head>
<body translate="no">
<script type="x-shader/x-fragment" id="reset-velocity">
precision highp float;
void main () {
gl_FragColor = vec4(vec3(0.), 1.);
}
</script>
<script type="x-shader/x-fragment" id="reset-position">
precision highp float;
uniform vec2 size;
// https://github.com/mattdesl/glsl-random
highp float random(vec2 co) {
highp float a = 12.9898;
highp float b = 78.233;
highp float c = 43758.5453;
highp float dt = dot(co.xy, vec2(a, b));
highp float sn = mod(dt, 3.14);
return fract(sin(sn) * c);
}
void main () {
vec2 nPosition = gl_FragCoord.st / size * 2. - 1.;
vec4 position = vec4(
nPosition * size,
0.,
random(nPosition)
);
gl_FragColor = position;
}
</script>
<script type="x-shader/x-fragment" id="velocity">
precision highp float;
uniform vec2 size;
uniform sampler2D prevVelocityTexture;
uniform sampler2D prevPositionTexture;
//
// Description : Array and textureless GLSL 2D/3D/4D simplex
// noise functions.
// Author : Ian McEwan, Ashima Arts.
// Maintainer : ijm
// Lastmod : 20110822 (ijm)
// License : Copyright (C) 2011 Ashima Arts. 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;
}
float snoise(vec3 v) {
const vec2 C = vec2(1.0/6.0, 1.0/3.0);
const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);
// First corner
vec3 i = floor(v + dot(v, C.yyy));
vec3 x0 = v - i + dot(i, C.xxx);
// Other corners
vec3 g = step(x0.yzx, x0.xyz);
vec3 l = 1.0 - g;
vec3 i1 = min(g.xyz, l.zxy);
vec3 i2 = max(g.xyz, l.zxy);
// x0 = x0 - 0.0 + 0.0 * C.xxx;
// x1 = x0 - i1 + 1.0 * C.xxx.........完整代码请登录后点击上方下载按钮下载查看
















网友评论0