07.Cesium快速上手-3dtiles加载

什么是3D Tiles

3D Tiles是一种开放的三维空间数据标准,其设计目的主要是为了提升大的三维场景中模型的加载和渲染速度。假如要在Web客户端渲染一个非常大的三维模型(如一个大城市的建筑模型),如果把模型全部下载到客户端并且进行渲染,这个过程所消耗的时间对于使用普通电脑的用户来说是不能接受的。然而,在绝大多数的用户交互式的三维场景中,都只需要渲染模型的一小部分,将三维模型全部加载并渲染是一种极大的资源浪费,3D Tiles为这个问题提供了一个很好的解决方案。将三维空间数据组织为3D Tiles格式,可以实现模型的按需加载和渲染,从而实现流畅的三维模型浏览体验。

3D Tiles的加载

const tileset = new Cesium.Cesium3DTileset({
  url: "../../SampleData/Cesium3DTiles/Tilesets/Tileset/tileset.json",
});

tileset.readyPromise
  .then(function (tileset) {
    viewer.scene.primitives.add(tileset);
    viewer.zoomTo(
      tileset,
      new Cesium.HeadingPitchRange(
        0.0,
        -0.5,
        tileset.boundingSphere.radius * 2.0
      )
    );
  })
  .catch(function (error) {
    console.log(error);
  });

摄影测量加载例子
加载两个Cesium3DTileset,用来贴图

// An example of using a b3dm tileset to classify another b3dm tileset.
const viewer = new Cesium.Viewer("cesiumContainer", {
  terrain: Cesium.Terrain.fromWorldTerrain(),
});

try {
  // A normal b3dm tileset containing photogrammetry
  const tileset = await Cesium.Cesium3DTileset.fromIonAssetId(40866);
  viewer.scene.primitives.add(tileset);
  viewer.zoomTo(tileset);

  const classificationTilesetUrl =
    "../SampleData/Cesium3DTiles/Classification/Photogrammetry/tileset.json";
  // A b3dm tileset used to classify the photogrammetry tileset
  const classificationTileset = await Cesium.Cesium3DTileset.fromUrl(
    classificationTilesetUrl,
    {
      classificationType: Cesium.ClassificationType.CESIUM_3D_TILE,
    }
  );
  classificationTileset.style = new Cesium.Cesium3DTileStyle({
    color: "rgba(255, 0, 0, 0.5)",
  });
  viewer.scene.primitives.add(classificationTileset);

  // The same b3dm tileset used for classification, but rendered normally for comparison.
  const nonClassificationTileset = await Cesium.Cesium3DTileset.fromUrl(
    classificationTilesetUrl,
    {
      show: false,
    }
  );
  nonClassificationTileset.style = new Cesium.Cesium3DTileStyle({
    color: "rgba(255, 0, 0, 0.5)",
  });
  viewer.scene.primitives.add(nonClassificationTileset);

  Sandcastle.addToggleButton("Show classification", true, function (
    checked
  ) {
    classificationTileset.show = checked;
    nonClassificationTileset.show = !checked;
  });
} catch (error) {
  console.log(`Error loading tileset: ${error}`);
} 
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值