var viewer = new Cesium.Viewer("cesiumContainer");
var tileset = viewer.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: "http://10.1.3.220:9003/model/tzoYurSE8/tileset.json",
})
);
// 设置白膜的默认透明度
tileset.readyPromise.then((tileset) => {
tileset.style = new Cesium.Cesium3DTileStyle({
color: {
conditions: [["true", "rgba(0, 127.5, 255 ,0.2)"]],
},
});
});
tileset.tileVisible.addEventListener((cesium3DTile) => {
// 以下设置白膜的打光效果
var cesium3DTileCon = cesium3DTile.content;
var featuresLength = cesium3DTileCon.featuresLength;
for (let i = 0; i < featuresLength; i += 2) {
var _model = cesium3DTileCon.getFeature(i).content._model;
if (_model && _model._sourcePrograms && _model._rendererResources) {
Object.getOwnPropertyNames(_model._sourcePrograms).forEach(
function (i) {
var msp = _model._sourcePrograms[i];
_model._rendererResources.sourceShaders[msp.fragmentShader] = `
varying vec3 v_positionEC;
void main(void){
vec4 position = czm_inverseModelView * vec4(v_positionEC,1); // 位置
float glowRange = 100.0; // 光环的移动范围(高度)
gl_FragColor = vec4(0.2, 0.5, 1.0, 1.0); // 颜色
gl_FragColor *= vec4(vec3(position.z / 100.0), 1.0); // 渐变
// 动态光环
float time = fract(czm_frameNumber / 360.0);
time = abs(time - 0.5) * 2.0;
float diff = step(0.005, abs( clamp(position.z / glowRange, 0.0, 1.0) - time));
gl_FragColor.rgb += gl_FragColor.rgb * (1.0 - diff);
}
`;
}
);
_model._shouldRegenerateShaders = true;
}
}
});
viewer.flyTo(tileset);
网友评论