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

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

官方案例

在这里插入图片描述