
原理就是3dtiles里面的属性clippingPlanes
采用ClippingPlaneCollection,构成多边形来挖洞。
其次就是xyz法向量挖洞
clippingPlanes: new this.ffCesium.Cesium.ClippingPlaneCollection({
unionClippingRegions: true, // true 表示多个切割面能合并为一个有效的切割区域
planes: [
new this.ffCesium.Cesium.ClippingPlane(
new this.ffCesium.Cesium.Cartesian3(0.0, 0.0, -1.0), // 法向量
23.0 // 切割平面到原点的距离(高度)
)
]
})
以下是多边形裁剪
import * as Cesium from 'cesium'
class tileSetClipByPolygon {
constructor(options) {
this.tileSet = options.tileSet || null //3dtiles
this.originPositions = options.originPositions || [] //点
this.unionClippingRegions = !options.unionClippingRegions ? options.unionClippingRegions : true
this.enabled = !options.enabled ? options.enabled : true
this.edgeColor = options.edgeColor || Cesium.Color.WHITE
this.edgeWidth = options.edgeWidth || 0.0
}
isClockwise(polygon) {
var area = 0
var length = polygon.length
for (var i = 0; i < length; i++) {
var j = (i + 1) % length
area += polygon[i][0] * polygon[j][1] - polygon[j][0] * polygon[i][1]
}
return area < 0
}
getInverseTransform() {
let transform
let tmp = this.tileSet.root.transform
if ((tmp && tmp.equals(Cesium.Matrix4.IDENTITY)) || !tmp) {
// 如果root.transform不存在,则3DTiles的原点变成了boundingSphere.center
transform = Cesium.Transforms.eastNorthUpToFixedFrame(this.tileSet.boundingSphere.center)
} else {
transform = Cesium.Matrix4.fromArray


3068

被折叠的 条评论
为什么被折叠?



