首页 > 其他分享 >cesium 加载3dtiles

cesium 加载3dtiles

时间:2023-10-26 18:17:08浏览次数:32  
标签:tileset const 3dtiles vec4 ._ cesium model gl 加载

注意cesium版本问题,还有这个是异步加载,定位到该模型时要加个延时settimeout

效果

 

代码如下

//3dtiles     function addThreeDTiles(url, option) {         // 开启地形深度检测:         // 控制在渲染场景时,相机是否进行深度测试以避免将被遮挡的物体绘制在前景         // true: 相机会根据地形高度信息进行深度测试,避免将低于地面的物体绘制在地面之上         viewer.scene.globe.depthTestAgainstTerrain = true
        // ! 写法一:将在 1.107 版本后不支持,options.url和Cesium3DTileset.readyPromise将被移除         return new Promise(resolve => {           const tileset = new Cesium.Cesium3DTileset({             url:url, // 模型切瓦后的瓦片索引文件地址或者Cesium Resource           })           tileset.readyPromise.then(() => {             viewer.scene.primitives.add(tileset)           })           resolve(tileset) // 返回模型对象         })       }
let tileset = {}
      const modelPromise = addThreeDTiles('http://localhost:8080/test3dtiles/tileset.json') 
      modelPromise.then(tileset2=> {
        //加载到viewer里
        viewer.scene.primitives.add(tileset2);
        tileset =tileset2
        console.log('tileset: ', tileset2)
       
      })
      setTimeout(function(){
        setLight(tileset)
        viewer.zoomTo(
          tileset,
          new Cesium.HeadingPitchRange(
            0.0,
            -0.5,
            tileset.boundingSphere.radius * 2.0 // 模型的包围球半径的2倍
          )
        )
      },1000)    
      // 传入3DTileS对象 设置泛光
             function setLight (tiles) {
                   const shader = `
                         varying vec3 v_positionEC;
                          void main(void){
                            vec4 position = czm_inverseModelView * vec4(v_positionEC,1); // 位置
                            float glowRange = 100.0; // 光环的移动范围(高度)
                            gl_FragColor = vec4(0.0, 0.3, 0.8, 0.8); // 颜色1
                           //  gl_FragColor = vec4(220.0, 0.3, 0.8, 0.8); // 颜色2
                            // 低于10米的楼不显示渐变色
                             if(position.z < 10.0) {
                              gl_FragColor *= vec4(vec3(position.z / 10.0 * 2.0), 1.0);
                            }else{
                              gl_FragColor *= vec4(vec3(position.z / 10.0), 0.8); // 渐变
                            }
                            // 设置动态光环
                            float time = fract(czm_frameNumber / 360.0);
                            time = abs(time - 0.5) * 1.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);
                          }
                          `;

                   tiles.tileVisible.addEventListener(function (tile) {
                     const content = tile.content
                     const featuresLength = content.featuresLength
                     let feature
                     for (var i = 0; i < featuresLength; i += 2) {
                       feature = content.getFeature(i)
                       const _model = feature.content._model
                       _model._shouldRegenerateShaders = true
                       Object.getOwnPropertyNames(_model._sourcePrograms).forEach(function (j) {
                         const _modelSourceP = _model._sourcePrograms[0]
                         _model._rendererResources.sourceShaders[_modelSourceP.fragmentShader] = shader
                   if(_model._sourcePrograms[1] != undefined){
                    const _modelSourceP1 = _model._sourcePrograms[1]
                         _model._rendererResources.sourceShaders[_modelSourceP1.fragmentShader] = shader
                   }
                         
                       })
                       _model._shouldRegenerateShaders = true
                     }
                   })
                 } 

 

标签:tileset,const,3dtiles,vec4,._,cesium,model,gl,加载
From: https://www.cnblogs.com/hjyjack9563-bk/p/17789998.html

相关文章

  • cesium加载arcgis 动态服务
    cesium加载不同坐标系的服务,主要是动态服务都可以用ArcGisMapServerImageryProvider来调用,但切片服务不能用此方法调用代码如下 //加载arcgis动态服务vardylayer=newCesium.ArcGisMapServerImageryProvider({url:"http://localhost:6080/arcgis/rest/services/......
  • cesium 加载geoserver wms服务
    代码如下//加载geoserverwmsvarwmslayer=newCesium.WebMapServiceImageryProvider({url:"http://localhost:8880/geoserver/postgis/wms",layers:'postgis:ceshi0606',parameters:{transparent:true,forma......
  • Unity从AssetBundle中加载特效显示不全的问题
    环境:Unity2021.3.25f1 最近做的项目中经常会出现通过Bundle加载的ParticleSystem显示不全的问题,查阅Unity官方的文档是这样说明的:Meshesmustberead/writeenabledtoworkonthe ParticleSystem.IfyouassignthemintheEditor,Unityhandlesthisforyou.Bu......
  • 好用的图片懒加载,图片可动态添加
    js: /* *LazyLoad-jQuerypluginforlazyloadingimages * *Copyright(c)2007-2013MikaTuupola * *LicensedundertheMITlicense: * http://www.opensource.org/licenses/mit-license.php * *Projecthome: * http://www.appelsiini......
  • 动态库加载失败:error while loading shared libraries: xxx.so: cannot open shared o
    lddmain|grepnot由0.1动态库的工作原理可知,只要把动态库libcalc.so的绝对路径添加到动态载入器ld-linux.so的搜索路径中,那么动态载入器就可以获取到动态库libcalc.so的绝对路径,接着就可以找到动态库文件libcalc.so,将动态库文件载入内存,然后就可以使用动态库里面的代码,最终可......
  • cesium 相机视口
    functionsaveView2(){varviewJson={//世界坐标(不直观)...viewer.camera.position,//弧度值(不直观)"heading":viewer.camera.heading,"pitch":......
  • Net 高级调试之二:CLR和Windows加载器及应用程序域介绍
    一、简介今天是Net高级调试的第二篇文章,第一篇文章记录了自己学习Net高级调试的第一步,认识一些调试工具,有了工具的倚仗,我们开始仗剑走天涯了,开始Net高级调试正式的征程了。我先说一下,我的文章,【调试测试】这部分一般分为两个部分,第一部分是要用到的所有测试代码样例,......
  • Java类加载机制详解 | 京东云技术团队
    一.类加载器及双亲委派机制类加载器加载类备注启动类加载器(BootstrapClassLoader)JAVA_HOME/jre/lib无上级,无法直接访问由jvm加载拓展类加载器(ExtensionClassLoader)JAVA_HOME/jre/lib/ext父加载器为Bootstrap,显示为null。该类由Bootstrap加载应用类加载器(ApplicationClassLoa......
  • vue 首次加载项目,控制台报错: Redirected when going from "/" to "/login"
    第一次加载加载页面时报错如下:Redirectedwhengoingfrom"/"to"/login"viaanavigationguard. ![image](https://img2023.cnblogs.com/blog/1880163/202310/1880163-20231025113840444-1010075971.png)后续在地址栏直接添加/login,index,错误页面等均正常无报错.路由......
  • vue3 动态加载组件
    <el-dropdownstyle="margin:0px"><el-buttontype="primary">视图</el-button><template#dropdown><el-dropdown-menu><el-dropdown-itemv-for="dropItemindropI......