学习cesium地形开挖功能(地形裁剪,凸多边形裁剪,凹多边形裁剪)

        本文章文字少少,干货多多,记录自己学习过程中的代码积累。

        官方提供有三种地形裁剪的示例,主要是运用到官方API:Cesium.ClipPlaneCollection,Cesium.ClippingPlane,Cesium.ClipPlane,Cesium.Plane,Cesium.ClippingPolygon,Cesium.ClippingPolygonCollection。

        早期版本的Cesium中,没有Cesium.ClippingPolygon,Cesium.ClippingPolygonCollection,凹多变的实现方案比较复杂,需要对源码进行打补丁,幸运的是现在官方已经提供了更好的方法了。

1.简单的地形裁剪

        这个的实现比较简单,只需要一个平面即可,平面与地形相交,将地形裁剪掉,实现代码如下:

// 简单裁剪
const simpleTerrainClip = () => {
  const globe = viewer.value.scene.globe;
  // 开启地形遮挡
  globe.depthTestAgainstTerrain = true;
  // 定义一个点,以这一点为原点。
  const position = Cesium.Cartesian3.fromDegrees(113.65, 26.0);
  const entity = viewer.value.entities.add({
    position: position,
  });
  globe.clippingPlanes = new Cesium.ClippingPlaneCollection({
    modelMatrix: entity.computeModelMatrix(Cesium.JulianDate.now()),
    planes: [
      new Cesium.ClippingPlane(new Cesium.Cartesian3(1.0, 0.0, 0.0), -150.0), // 原点东方向,裁剪距离为150米向西方向的整个地球空间模型
      new Cesium.ClippingPlane(new Cesium.Cartesian3(-1.0, 0.0, 0.0), -150.0), // 原点西方向,裁剪距离为150米向东方向的整个地球空间模型
      new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -150.0), // 原点北方向,裁剪距离为150米向南方向的整个地球空间模型
      new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -1.0, 0.0), -150.0), // 原点南方向,裁剪距离为150米向北方向的整个地球空间模型
      // new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -1.0), -150.0), // 原点高度方向,裁剪高度为150米以上的整个地球空间模型
      // new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, 1.0), -150.0), // 原点高度方向,裁剪高度为150米以下的整个地球空间模型
    ],
    edgeWidth: 1.0,
    edgeColor: Cesium.Color.WHITE,
    enabled: true,
  });
  globe.backFaceCulling = true;
  globe.showSkirts = true;
};

简单画了两个图来说明这个裁剪面的作用效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值