雷达扫描-使用自定义纹理实现
截图
着色器代码
#define SMOOTH(r,R) (1.0-smoothstep(R-1.0,R+1.0, r))
#define M_PI 3.1415926535897932384626433832795
float movingLine(vec2 uv, vec2 center, float radius) {
float theta0 = 90.0 * fract(czm_frameNumber/60.0 * speed) * 4.0;
vec2 d = uv - center;
float r = sqrt(dot(d, d));
if(r < radius) {
vec2 p = radius * vec2(cos(theta0 * M_PI / 180.0), -sin(theta0 * M_PI / 180.0));
float l = length(d - p * clamp(dot(d, p) / dot(p, p), 0.0, 1.0));
d = normalize(d);
float theta = mod(180.0 * atan(d.y, d.x) / M_PI + theta0, 360.0);
float gradient = clamp(1.0 - theta / 90.0, 0.0, 1.0);
return SMOOTH(l, 1.0) + 0.25 * gradient;
} else
return 0.0;
}
czm_material czm_getMaterial(czm_materialInput materialInput) {
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
vec2 center = vec2(0.5,0.5);
float fragValue = movingLine(st, center, 1.0);
material.alpha = color.a;
material.emission = fragValue * vec3(color.rgb);
return material;
}
github中地址
https://github.com/c-lei-en/cesium_special_effect