空间产品工程商业项目· MindCloudX AI 一代产品系
大规模 Mesh 与点云可视化
面向千万面片级 Mesh 与激光点云的两个 Web 子应用,分别基于 CesiumJS 3D Tiles 与 Potree 八叉树实现流式查看与测量。
- Vue 3.5
- TypeScript
- Vite
- CesiumJS 1.138
- Potree
- Three.js
- Pinia
- Arco Design
- 我的角色
- Mesh 编辑器前端架构与 Cesium 集成,点云查看器的宿主联动与构建管线
- 材料说明
- 项目资料与交付记录
- 面片规模(3D Tiles 流式加载)
- 千万级
- Worker 内二进制解码的点云格式
- LAS / LAZ
- 子应用形态(Mesh 编辑器 / 点云查看器)
- 2
其余 1 项指标与口径
- 子应用形态(Mesh 编辑器 / 点云查看器)
- 2
背景问题
摄影测量与 3DGS 导出的 Mesh 动辄百万到千万面片,点云则是亿级点数。浏览器内存只有数 GB,不能整体加载,也不能在前端完成重几何运算。
约束
- 前端只能持有当前可见的分块瓦片。
- 切割、简化与格式导出需要后端完成。
- 宿主平台通过 iframe 嵌入两个子应用,语言需要与宿主同步。
架构
Mesh 编辑器(Vue 3.5 + CesiumJS)
├─ 前端:3D Tiles 流式加载、ClippingPlane 实时剖切预览、测量
└─ 后端(FastAPI + Celery):网格切割、平滑、简化、多格式导出,前端轮询进度
点云查看器(Vue 3.5 + Potree)
├─ Potree 八叉树按视锥流式加载,Worker 解码 LAS / LAZ
└─ 读取宿主约定的 localStorage 语言设置
关键决策与取舍
- 轻前端、重后端:前端只做可视化与参数收集;Laplacian、Taubin 平滑与 QEM 简化在后端异步完成,避免浏览器卡死。
- 响应式隔离:Cesium 的 Viewer 与 Tileset 只能存放在非响应式字段或浅引用中。否则 Vue 的深层代理会劫持每帧的渲染矩阵。
- 统一坐标入口:业务层不直接调用 Cesium 坐标 API,统一经过 WGS84、ECEF、屏幕与局部坐标的转换工具,拾取优先使用表面深度,失败时回退到椭球面。
- 点云引擎分离构建:Potree 引擎源码先经 Gulp 与 Rollup 生成产物,再供 Vue 壳加载。约定只改源码,不改产物。
- SPA 切换的资源释放:销毁顺序固定为卸载 tileset、销毁 viewer、清理动画帧与事件,避免切换页面时出现 WebGL 上下文丢失。
结果
- 千万级面片的 Mesh 可以在浏览器中流式查看与剖切,导出由后端完成。
- 点云查看器可以与宿主共享语言设置,无需额外的语言切换界面。
我的职责
- Mesh 编辑器的前端架构、Cesium 集成与坐标工具。
- 点云查看器的宿主联动与构建管线。