Cesium加载3DTiles模型并且重新设置3DTiles模型的高度

发布于:2025-07-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

代码:

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

代码效果:
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到