前言
该方法仅支持挖出凸多边形。想要挖凹多边形,需要把凹多边形分拆成多个凸多边形分别进行开挖。
修改文件
补丁文件来源官方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
然后将编译出的以下目录拷贝替换到项目中
编译目录 | 项目目录 |
---|---|
Source | node_modules/cesium/Source |
Build/CesiumUnminified | node_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
我使用decomp.js将凹多边形裁剪成多个凸多边形,但是分隔出的结果有很多小三角形,这样切割地形会产生无限大的裂缝,请问有遇到过吗
这个裁剪地形的效果会将地面以下部分都挖空,然后地球内部又是单面渲染,所以就导致了挖除区域会直接看到宇宙,而挖孔的边缘如果没有被其他实体面填充的话,视觉上就出现了裂缝的效果。解决方法就是,创建实体面或墙把挖除区域包围起来。