代碼:
使用的時候,直接調用 load3DTiles()
方法既可。
// 加載3Dtiles
const load3DTiles = async () => {let tiles_url = "/3DTiles2/Production_1.json";let tileset = await Cesium.Cesium3DTileset.fromUrl(tiles_url, {enableCollision: true, // 開啟碰撞檢測maximumScreenSpaceError: 1, // 控制精度maximumMemoryUsage: 2048, // 最大內存使用(MB)cullWithChildrenBounds: true, // 優化裁剪});let readyTileset = viewer.scene.primitives.add(tileset);set3DTilesPosition(readyTileset, tileset);
};// 設置3Dtiles模型位置
const set3DTilesPosition = (readyTileset, tileset) => {if (readyTileset && tileset) {let heightOffset = -1318; // 調整離地面的高度,主要修改這里//計算tileset的綁定范圍let boundingSphere = tileset.boundingSphere;//計算中心點位置let cartographic1 = Cesium.Cartographic.fromCartesian(boundingSphere.center);//計算中心點位置坐標let surface = Cesium.Cartesian3.fromRadians(cartographic1.longitude,cartographic1.latitude,0);//偏移后的三維坐標let offset = Cesium.Cartesian3.fromRadians(cartographic1.longitude,cartographic1.latitude,heightOffset);let translation = Cesium.Cartesian3.subtract(offset,surface,new Cesium.Cartesian3());//tileset.modelMatrix轉換readyTileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);// 視角切換到模型viewer.zoomTo(tileset);}
};
代碼效果: