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