cesium中多个3dTiles模型合模展示示例

1.注意问题

  1. cesium支持unsigned short - 5123,但可能不支持unsigned int - 5125
  2. 需要将经纬度坐标转换为笛卡尔坐标,否则模型可能会出现在cesium地球体地下,看不到模型
    var viewer = new Cesium.Viewer("cesiumContainer");
    var pos = Cesium.Cartesian3.fromDegrees(120.0, 33.0, 50);  //经纬都是弧度制,高度单位为米
    var mat = Cesium.Transforms.eastNorthUpToFixedFrame(pos);
    console.log(mat);
  3. 出了第二步可以调整位置外,还可以用代码的方式调整子模型位置,见如下代码
  4. z-up y-up问题

2.合模

博主上传了3个3dTiles模型,分别对应assetId为:1131266、1131313、1131335,

 

window.startup = function (Cesium) {
    'use strict';
//Sandcastle_Begin
// Grant CesiumJS access to your ion assets
Cesium.Ion.defaultAccessToken = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiYjdhZTc3Mi05NjIyLTQwM2QtOTYxYy03MGY0YmExZmRmYWMiLCJpZCI6NDM0NTgsImlhdCI6MTYxMjY2NDQ1Mn0.XFGydCj1ZdU_BW4hiqA3V8Eqb0XMUaROUnyKZDYFaE4";
const viewer = new Cesium.Viewer("cesiumContainer");

const tileset = viewer.scene.primitives.add(
  new Cesium.Cesium3DTileset({
    url: Cesium.IonResource.fromAssetId(1131266),
  })
);

const tileset2 = viewer.scene.primitives.add(
  new Cesium.Cesium3DTileset({
    url: Cesium.IonResource.fromAssetId(1131313),
  })
);

const tileset3 = viewer.scene.primitives.add(
  new Cesium.Cesium3DTileset({
    url: Cesium.IonResource.fromAssetId(1131335),
  })
);

console.log(Cesium.Cartesian3.fromDegrees( 70, 20, 0));

(async () => {
  try {
    await tileset.readyPromise.then(function(){
      let position = Cesium.Cartesian3.fromDegrees(116, 39, 13.113547746);
      tileset._root.transform = Cesium.Transforms.eastNorthUpToFixedFrame(position);
    });
    await tileset2.readyPromise.then(function(){
      let position = Cesium.Cartesian3.fromDegrees(116, 39, 13.113547746);
      tileset2._root.transform = Cesium.Transforms.eastNorthUpToFixedFrame(position);
    });
    await tileset3.readyPromise.then(function(){
      let position = Cesium.Cartesian3.fromDegrees(116, 39, 13.113547746);
      tileset3._root.transform = Cesium.Transforms.eastNorthUpToFixedFrame(position);
    });
    await viewer.zoomTo(tileset);
    await viewer.zoomTo(tileset2);
    await viewer.zoomTo(tileset3);

    // Apply the default style if it exists
    var extras = tileset.asset.extras;
    if (
      Cesium.defined(extras) &&
      Cesium.defined(extras.ion) &&
      Cesium.defined(extras.ion.defaultStyle)
    ) {
      tileset.style = new Cesium.Cesium3DTileStyle(extras.ion.defaultStyle);
    }
  } catch (error) {
    console.log(error);
  }
})();
//Sandcastle_End
    Sandcastle.finishedLoading();
};
if (typeof Cesium !== 'undefined') {
    window.startupCalled = true;
    window.startup(Cesium);
}

3.效果

 

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值