当我们转换得到3dtiles格式数据后,将数据添加到cesium中: 

tileset = new Cesium.Cesium3DTileset({ 
              url: "./tileset.json",  //文件路径
          }); 
viewer.scene.primitives.add(tileset); 

 模型可能出现以下不贴地的情况:

对于此类问题,解决办法参考如下:

tileset.readyPromise.then(function(tileset) {
            //高度偏差,正数为向上偏,负数为向下偏,根据真实的模型位置不断进行调整
            var heightOffset = -210;
            //计算tileset的绑定范围
            var boundingSphere = tileset.boundingSphere;
            //计算中心点位置
            var cartographic = Cesium.Cartographic.fromCartesian(boundingSphere.center);
            //计算中心点位置坐标
            var surface = Cesium.Cartesian3.fromRadians(cartographic.longitude, 
cartographic.latitude, 0);
            //偏移后的三维坐标
            var offset = Cesium.Cartesian3.fromRadians(cartographic.longitude, 
cartographic.latitude, heightOffset);
            var translation = Cesium.Cartesian3.subtract(offset, surface, new Cesium.Cartesian3());
            //tileset.modelMatrix转换
            tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
}

模型定位:

viewer.zoomTo(tileset);

修改后,模型贴地显示如下(设置不同的偏移量可以获得不同高度的模型): 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐