代码:
使用的时候,直接调用 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);
}
};
代码效果: