5038

Cesium修改源码增加多区域挖除功能

前言

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

修改文件

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

补丁文件点此链接下载
https://dotatong.cn/tools/cesium_multi_clipping.zip

此份代码是在cesium1.74基础上修改而来的,我已经尝试过集成到1.91版本。理论上1.74以上版本都是可以支持的。

⚠️请不要直接用补丁文件替换原来的文件,请按本文标明的行数替换官方版本的文件,以下是各个文件需要替换的行号

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

编译

yarn release

项目使用

项目先安装官方cesium

yarn add cesium@1.91

然后将编译出的以下目录拷贝替换到项目中

编译目录项目目录
Sourcenode_modules/cesium/Source
Build/CesiumUnminifiednode_modules/cesium/Build/CesiumUnminified

挖坑代码

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,
})
文章作者:DOTATONG
发布日期:2022-03-10
# cesium

评论

2 条

小熊

我使用decomp.js将凹多边形裁剪成多个凸多边形,但是分隔出的结果有很多小三角形,这样切割地形会产生无限大的裂缝,请问有遇到过吗

回复 ·

DOTATONG 作者

这个裁剪地形的效果会将地面以下部分都挖空,然后地球内部又是单面渲染,所以就导致了挖除区域会直接看到宇宙,而挖孔的边缘如果没有被其他实体面填充的话,视觉上就出现了裂缝的效果。解决方法就是,创建实体面或墙把挖除区域包围起来。

回复 ·

添加新评论