倾斜压平分析
DMap3D.analysis.flattenAnalysis 用于在 3D Tiles 模型上对指定区域进行压平处理。
引入
import DMap3D from 'dmap3d'
import * as Cesium from 'cesium'
基本用法
const viewer = new Cesium.Viewer('cesiumContainer')
// 加载 3D Tiles 模型
const tileset = await Cesium.Cesium3DTileset.fromUrl('/path/to/tileset.json')
viewer.scene.primitives.add(tileset)
// 创建压平工具
const flatten = new DMap3D.analysis.flattenAnalysis(viewer)
// 激活压平(左键绘制多边形,右键完成)
flatten.activate(tileset)
构造函数
new DMap3D.analysis.flattenAnalysis(viewer)
参数:
viewer- Cesium.Viewer 实例
方法
activate(tileset, height?)
激活绘制并应用压平。用户左键点击添加多边形顶点,右键完成绘制并自动应用压平效果。
// 压平到多边形中心高度
flatten.activate(tileset)
// 压平到指定高度(相对于多边形中心,单位:米)
flatten.activate(tileset, -5.0) // 压平到中心下方 5 米
flatten.activate(tileset, 10.0) // 压平到中心上方 10 米
参数:
tileset- Cesium.Cesium3DTileset 实例height?- 压平高度(可选),默认 0(多边形中心高度)
setHeight(height)
动态更新压平高度。
flatten.setHeight(-10.0) // 调整压平高度
clear()
清除压平效果,恢复模型原始状态。
flatten.clear()
destroy()
销毁工具并释放资源。
flatten.destroy()
完整示例
const viewer = new Cesium.Viewer('cesiumContainer')
// 加载 3D Tiles
const tileset = await Cesium.Cesium3DTileset.fromUrl('/3DTiles/DaYanTa/tileset.json')
viewer.scene.primitives.add(tileset)
await viewer.zoomTo(tileset)
// 创建压平工具
const flatten = new DMap3D.analysis.flattenAnalysis(viewer)
// 激活压平
flatten.activate(tileset, 0)
// 动态调整高度
flatten.setHeight(-5.0)
// 清除压平
flatten.clear()
// 重新压平到不同高度
flatten.activate(tileset, 10.0)
// 销毁
flatten.destroy()
技术原理
- 使用
CustomShader在顶点着色器中修改模型顶点高度 - 通过纹理遮罩精确控制压平区域
- 基于 ENU 局部坐标系确保压平方向垂直于地面