700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > cesium加载3dtiles白膜 通过shader自定义材质实现渐变效果并显示动态光环

cesium加载3dtiles白膜 通过shader自定义材质实现渐变效果并显示动态光环

时间:2019-12-28 14:20:44

相关推荐

cesium加载3dtiles白膜 通过shader自定义材质实现渐变效果并显示动态光环

关键代码:

function loadTilesShader(tileset) {tileset.style = new Cesium.Cesium3DTileStyle({color: {conditions: [['true', 'rgba(0, 127.5, 255 ,1)']]}});//实现渐变效果tileset.tileVisible.addEventListener(function (tile) {var content = tile.content;var featuresLength = content.featuresLength;for (let i = 0; i < featuresLength; i += 2) {let feature = content.getFeature(i)let model = feature.content._modelif (model && model._sourcePrograms && model._rendererResources) {Object.keys(model._sourcePrograms).forEach(key => {let program = model._sourcePrograms[key]let fragmentShader = model._rendererResources.sourceShaders[program.fragmentShader];let v_position = "";if (fragmentShader.indexOf(" v_positionEC;") != -1) {v_position = "v_positionEC";} else if (fragmentShader.indexOf(" v_pos;") != -1) {v_position = "v_pos";}const color = `vec4(${feature.color.toString()})`;model._rendererResources.sourceShaders[program.fragmentShader] =`varying vec3 ${v_position};void main(void){vec4 position = czm_inverseModelView * vec4(${v_position},1); // 位置gl_FragColor = ${color}; // 颜色gl_FragColor *= vec4(vec3(position.z / 50.0), 1.0); // 渐变// 动态光环float time = fract(czm_frameNumber / 180.0);time = abs(time - 0.5) * 2.0;float glowRange = 180.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}}});}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。