重读Cesium(二):修改源码增加多区域挖空功能

在上篇文章中,我们学到了如何对cesium源码进行打包编译,今天我们再来学习一下如何修改cesium源码,增加多区域挖空功能。因为cesium本身只支持单面的挖空,所以要进行源码修改增加该功能。

前言

该方法仅支持挖出凸多边形。想要挖凹多边形,需要把凹多边形分拆成多个凸多边形分别进行开挖。

修改文件

补丁文件来源官方issu
https://github.com/CesiumGS/cesium/issues/8751

补丁文件点此链接下载
https://download.csdn.net/download/weixin_49929681/89294123

此份代码是在cesium1.74基础上修改而来的,我已经尝试过集成到1.91版本。但是cesium在1.97版本后对webgl语法进行了修改,要把该补丁文件中的

texture2D 更换成 texture

⚠️请不要直接用补丁文件替换原来的文件,请按本文标明的行数替换官方版本的文件,以下是各个文件需要替换的行号,有一些位置不对的地方,可自行搜索单面挖空的api,新增的内容基本都是在单面挖空中增加判断

Source/Shaders/GlobeFS.glsl

74  
79~82  
310~313  
411

Source/Scene/Globe.js

387~400

Source/Scene/GlobeSurfaceShaderSet.js

6  
14~15  
22  
100~102  
168  
177~180  
188~189  
205  
211  
217~221  
310~312  
422

Source/Scene/GlobeSurfaceTileProvider.js

40  
54~57  
174~180  
330~348  
438~440  
667  
797~810  
1351~1354  
1679~1685  
1697~1709  
1725~1731  
1735~1745  
1825~1828  
2668

MultiClippingPlaneCollection.js

文件直接放入Source/Scene下

在这里插入图片描述

getMultiClippingFunction.js

文件直接放入Source/Scene下

在这里插入图片描述

修改完成后,再对cesium源码进行编译打包,将项目中cesium包进行替换。

挖坑代码


let entity=viewer.entities.add({position: Cesium.Cartesian3.fromDegrees(119.565149, 29.053939, 50)
})

let clippingPlaneCollection1 = new Cesium.ClippingPlaneCollection({
  planes: [
    new Cesium.ClippingPlane(new Cesium.Cartesian3(1.0, 0.0, 0.0), 0.0),
    new Cesium.ClippingPlane(new Cesium.Cartesian3(-1.0, 0.0, 0.0), -500.0),
    new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -15.0),
    new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -1.0, 0.0), -15.0),
  ],
})
let clippingPlaneCollection2 = new Cesium.ClippingPlaneCollection({
  planes: [
    new Cesium.ClippingPlane(new Cesium.Cartesian3(1.0, 0.0, 0.0), 1000),
    new Cesium.ClippingPlane(new Cesium.Cartesian3(-1.0, 0.0, 0.0), -2000.0),
    new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 1.0, 0.0), -15.0),
    new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, -1.0, 0.0), -15.0),
  ],
})

viewer.scene.globe.multiClippingPlanes = new Cesium.MultiClippingPlaneCollection({
  collections: [clippingPlaneCollection1, clippingPlaneCollection2],
  modelMatrix: entity.computeModelMatrix(Cesium.JulianDate.now()),
  edgeWidth: 1,
  edgeColor: Cesium.Color.RED,
})
var homeView = {
        // eslint-disable-next-line no-undef
        destination: Cesium.Cartesian3.fromDegrees(
          119.565149,
          29.053939,
          800000
        ),
        orientation: {
          // 航向
          // eslint-disable-next-line no-undef
          heading: Cesium.Math.toRadians(0),
          // 俯仰
          // eslint-disable-next-line no-undef
          pitch: Cesium.Math.toRadians(-90),
          // 滚转
          roll: 0.0
        }
      }

      // 初始化视角(飞行模式)
      viewer.camera.flyTo(homeView)

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS肆月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值