Cesium加载3DTiles模型并且重新设置3DTiles模型的高度
摘要: 该代码展示了如何在Cesium中加载并调整3DTiles模型位置。通过load3DTiles()方法加载JSON格式的3DTiles数据,并配置碰撞检测、精度控制等参数。set3DTilesPosition()函数通过计算模型中心点坐标,实现高度偏移调整(如heightOffset = -1318),最终生成模型矩阵完成定位。效果图显示模型被正确加载并定位到指定位置,视角自动聚焦到模型。代
·
代码:
使用的时候,直接调用 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);
}
};
代码效果:
更多推荐



所有评论(0)