feat: add cesium traffic signal countdowns
This commit is contained in:
@@ -1,21 +1,42 @@
|
||||
# 实施计划:Cesium 路口信号灯可视化
|
||||
|
||||
1. 从现有停止线和路口面建立稳定的信号锚点生成器,输出区域局部坐标、朝向、路口与相位组。
|
||||
2. 将锚点 JSON 作为 preview 的可选支持文件写入区域输出与 preview manifest,不触及主 GLB。
|
||||
3. 在 Cesium 运行时加载可选锚点,构造立杆、灯头、红黄绿灯珠,并以统一相位钟更新状态。
|
||||
4. 将路线投影到匹配停止线,在红/黄相位冻结累计里程、绿灯恢复推进;未匹配路线保持原行为。
|
||||
5. 添加 Signals 显示开关和诊断摘要,保持加载降级语义与既有 Controls 的布局。
|
||||
6. 为锚点推导和预览配置/运行时编写针对性测试;构建目标区域并人工核对位置、相位与停车。
|
||||
1. 复用 `traffic-signals.js` 的锚点推导,在 `intermediates` 阶段把附属
|
||||
`traffic_signals.json` 写入 `geojsonDir`;不修改 `SCENE_LAYERS`、GeoPackage 或 QGIS。
|
||||
2. 在 `blender/osmassets/traffic_signals.py` 用共享低多边形 MeshBatch 几何装配静态信号设施,
|
||||
并在 `generate_scene.py` 读取锚点、投影坐标、置入 `05_Props` 和写入计数。
|
||||
3. 在 `catalog.MATERIALS` 末尾追加信号设施材质和 Cesium 导出补偿,保证新 GLB 在 Cesium
|
||||
中不会发黑或材质索引漂移。
|
||||
4. 让 preview 直接读取 intermediates 的锚点文件;删除 Cesium 对立杆、横杆、灯头、熄灭灯珠
|
||||
和外壳的构造,只保留精确对齐的动态灯珠、数字与既有相位/车辆等待。
|
||||
5. 更新 Node 与纯 Python 测试,构建目标区域并用 parity 检查 GLB 差异只包含预期新增设施;
|
||||
人工核对主 GLB 静态构件和 preview 动态覆盖层。
|
||||
|
||||
## 验证
|
||||
|
||||
```bash
|
||||
npm run test:preview-assets
|
||||
node --check scripts/lib/cesium-preview.js
|
||||
npm run build:area -- --config config/areas/nantaizi-lake-innovation-valley.json --stages preview
|
||||
python3 -m unittest discover blender/tests
|
||||
npm run build:area -- --config config/areas/nantaizi-lake-innovation-valley.json --stages intermediates,blender,cesium,preview
|
||||
git diff --check
|
||||
```
|
||||
|
||||
## 已验证决策与故障记录
|
||||
|
||||
- `assets/fonts/7LED-1.ttf` 已纳入版本管理;该字体是反向 LED 轮廓。直接填充文字会得到
|
||||
绿色背景/黑色字,曲线描边会得到空心描边字;当前实现改为采样负轮廓并构造实心挤出
|
||||
棱柱,独立 Blender 渲染已确认数字形状正确。
|
||||
- 为支持相位字色且避免复制几何,动态导出拆为灯珠 GLB + countdown group 0/1 两个 GLB。
|
||||
预览三者共用同一 placement,倒计时模型使用 `colorBlendMode=REPLACE` 做模型级换色。
|
||||
- 失败方案:Cesium `Model.getMaterial().setValue()` 修改普通 glTF PBR uniforms,用户实测
|
||||
数字仍为绿色,不能恢复使用。
|
||||
- 失败陷阱:导出器的 `groups` 是完整材质名集合,不能检查精确字符串 `"Countdown Group 0"`;
|
||||
必须用 `"Countdown Group 0" in name` 的包含判断,否则导出阶段报
|
||||
`Traffic countdown collection 0 is empty`。
|
||||
- glTF 的 `Could not calculate tangents` 警告来自无 UV 的纯色倒计时 mesh;只要三个 GLB
|
||||
均成功生成,它不是阻断错误。
|
||||
|
||||
## 回退
|
||||
|
||||
删除信号锚点的 preview 输出与浏览器加载代码;QGIS、GLB、车辆路线和原有预览功能不受影响。
|
||||
删除静态信号 Blender 模块、附属锚点输出和浏览器动态覆盖层;QGIS、道路/标线和既有路线
|
||||
JSON 不受影响。
|
||||
|
||||
Reference in New Issue
Block a user