111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
const viewer = new Cesium.Viewer('cesiumContainer')
|
|
|
|
let xMin = 123.894604,
|
|
yMin = 34.516896,
|
|
xMax = 125.431959,
|
|
yMax = 35.630521
|
|
let rect = new Cesium.Rectangle(
|
|
Cesium.Math.toRadians(xMin),
|
|
Cesium.Math.toRadians(yMin),
|
|
Cesium.Math.toRadians(xMax),
|
|
Cesium.Math.toRadians(yMax)
|
|
)
|
|
const rectangle = new Cesium.RectangleGeometry({
|
|
rectangle: rect,
|
|
height: 10.0,
|
|
})
|
|
const geometry = Cesium.RectangleGeometry.createGeometry(rectangle)
|
|
viewer.scene.primitives.add(
|
|
new Cesium.Primitive({
|
|
asynchronous: false,
|
|
geometryInstances: new Cesium.GeometryInstance({
|
|
geometry: geometry,
|
|
}),
|
|
appearance: new Cesium.MaterialAppearance({
|
|
material: new Cesium.Material({
|
|
fabric: {
|
|
uniforms: {
|
|
image:
|
|
'https://png.pngtree.com/png-vector/20240611/ourmid/pngtree-decorative-dividing-horizontal-line-with-star-shape-vector-png-image_12658779.png',
|
|
},
|
|
},
|
|
}),
|
|
fragmentShaderSource: `
|
|
in vec3 v_positionEC;
|
|
in vec3 v_normalEC;
|
|
in vec2 v_st;
|
|
|
|
// Maximum number of cells a ripple can cross.
|
|
#define MAX_RADIUS 2
|
|
|
|
// Set to 1 to hash twice. Slower, but less patterns.
|
|
#define DOUBLE_HASH 0
|
|
|
|
// Hash functions shamefully stolen from:
|
|
// https://www.shadertoy.com/view/4djSRW
|
|
#define HASHSCALE1 .1031
|
|
#define HASHSCALE3 vec3(.1031, .1030, .0973)
|
|
|
|
float hash12(vec2 p)
|
|
{
|
|
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1);
|
|
p3 += dot(p3, p3.yzx + 19.19);
|
|
return fract((p3.x + p3.y) * p3.z);
|
|
}
|
|
|
|
vec2 hash22(vec2 p)
|
|
{
|
|
vec3 p3 = fract(vec3(p.xyx) * HASHSCALE3);
|
|
p3 += dot(p3, p3.yzx+19.19);
|
|
return fract((p3.xx+p3.yz)*p3.zy);
|
|
|
|
}
|
|
|
|
void main( )
|
|
{
|
|
|
|
//float resolution = 10. * exp2(-3.*iMouse.x/iResolution.x);
|
|
// vec2 uv = fragCoord.xy / iResolution.y * resolution;
|
|
float resolution =20.;
|
|
vec2 uv = v_st * resolution;
|
|
vec2 p0 = floor(uv);
|
|
|
|
float iTime=czm_frameNumber/100.;
|
|
|
|
vec2 circles = vec2(0.);
|
|
for (int j = -MAX_RADIUS; j <= MAX_RADIUS; ++j)
|
|
{
|
|
for (int i = -MAX_RADIUS; i <= MAX_RADIUS; ++i)
|
|
{
|
|
vec2 pi = p0 + vec2(i, j);
|
|
#if DOUBLE_HASH
|
|
vec2 hsh = hash22(pi);
|
|
#else
|
|
vec2 hsh = pi;
|
|
#endif
|
|
vec2 p = pi + hash22(hsh);
|
|
|
|
float t = fract(0.3*iTime + hash12(hsh));
|
|
vec2 v = p - uv;
|
|
float d = length(v) - (float(MAX_RADIUS) + 1.)*t;
|
|
|
|
float h = 1e-3;
|
|
float d1 = d - h;
|
|
float d2 = d + h;
|
|
float p1 = sin(31.*d1) * smoothstep(-0.6, -0.3, d1) * smoothstep(0., -0.3, d1);
|
|
float p2 = sin(31.*d2) * smoothstep(-0.6, -0.3, d2) * smoothstep(0., -0.3, d2);
|
|
circles += 0.5 * normalize(v) * ((p2 - p1) / (2. * h) * (1. - t) * (1. - t));
|
|
}
|
|
}
|
|
circles /= float((MAX_RADIUS*2+1)*(MAX_RADIUS*2+1));
|
|
|
|
float intensity = mix(0.01, 0.15, smoothstep(0.1, 0.6, abs(fract(0.05*iTime + 0.5)*2.-1.)));
|
|
vec3 n = vec3(circles, sqrt(1. - dot(circles, circles)));
|
|
vec3 color = texture(image_0, uv/resolution - intensity*n.xy).rgb + 5.*pow(clamp(dot(n, normalize(vec3(1., 0.7, 0.5))), 0., 1.), 6.);
|
|
out_FragColor = vec4(color, color.r+color.g+color.b);
|
|
}
|
|
`,
|
|
}),
|
|
})
|
|
)
|