cesium中3dtiles加载后悬浮空中:
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);
修改后模型贴地显示如下: