Cesium绘制双实线
2023-02-14 本文已影响0人
周五蛋碎一地
最近有个项目要用到道路的双实线,于是研究了一下Polyline的用法,发现在现有的PolylineGlowMaterial基础上稍微改动一下就可以用,把中间发光区域alpha设置为0就可以了,使用的时候taperPower设置为1,或者直接不要都可以。
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
float glow = glowPower / abs(st.t - 0.5) - (glowPower / 0.5);
if (taperPower <= 0.99999) {
glow *= min(1.0, taperPower / (0.5 - st.s * 0.5) - (taperPower / 0.5));
}
vec4 fragColor;
fragColor.rgb = max(vec3(glow - 1.0 + color.rgb), color.rgb);
if(glow - 1.0 > 0.0) {
fragColor.a = 0.0;
} else {
fragColor.a = color.a;
}
fragColor = czm_gammaCorrect(fragColor);
material.emission = fragColor.rgb;
material.alpha = fragColor.a;
return material;
}
也可以用纹理坐标直接计算,直接设置alpha为0,或者直接discard都可以。
czm_material czm_getMaterial(czm_materialInput materialInput)
{
czm_material material = czm_getDefaultMaterial(materialInput);
vec2 st = materialInput.st;
vec4 fragColor = color;
if(st.t < 0.5 + intervalRatio * 0.5 && st.t > 0.5 - intervalRatio * 0.5) {
fragColor.a = 0.0;
} else {
fragColor.a = color.a;
}
fragColor = czm_gammaCorrect(fragColor);
material.emission = fragColor.rgb;
material.alpha = fragColor.a;
return material;
}
效果如下:
不要压线!不要压线!不要压线!