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