cesium之平面裁切
3D Tiles裁切
简单案例:创造一个通过模型中心点的法线向下的裁切平面,如图所示:黄色部位为被裁剪的部位。

- 代码
let clippingPlanes = new Cesium.ClippingPlaneCollection({
planes: [
new Cesium.ClippingPlane(new Cesium.Cartesian3(0.0, 0.0, -0.1), 0.0)
],
unionClippingRegions: true,
edgeColor: Cesium.Color.RED,
edgeWidth: 1
})
// 设置模型的裁切平面clippingPlanes
this.tileset = this.viewer.scene.primitives.add(new Cesium.Cesium3DTileset({
url: '../../static/Cesium/Assets/Models/' + this.url,
dynamicScreenSpaceError: true,
cullWithChildrenBounds: false,
skipLevels: 0,
maximumScreenSpaceError: 0,
clippingPlanes: clippingPlanes//添加裁切
}))
相关API
ClippingPlaneCollection
-
指定一组剪裁平面 。
-
通常,剪裁平面的坐标是相对于它们所附着的对象,因此距离设置为0的平面将剪切穿过对象的中心。
-
平面的法向,如果法线向下,以平面为界限,相反方向都是外部,如图所示:

- 平面法向所在坐标系是以正东方为x轴正方向,正北方为y轴正方向,正上面为z轴正方向的坐标系

| 参数 | 注释 |
|---|---|
| planes | 用于在每个平面的外部选择性地禁用渲染的对象数组 |
| edgeColor | 应用的颜色用于突出显示剪切对象的边缘,就是测试阶段能让你看到剪切的位置 |
| edgeWidth | 应用于剪裁对象的边缘的高光的宽度(以像素为单位) |
| unionClippingRegions | 如果为true,则所有平面外部(法向的反方向)都被剪切。否则,只有区域位于每个平面的外侧,才会剪切区域,就是所谓切片的交集 |
如图所示:黄色区域就是交集,原谅我的图画的好丑啊QAQ…

ClippingPlane
- 创建一个裁切平面,设置平面的法线方向和从原点到平面的最短距离,裁切平面会经过原点,
- 如果距离为正,则原点在法向的方向上;如果距离为负,则原点在法向反方向上;
- 如果距离为零,原点在模型的正中心,如下图所示。


