Files
MapLibreParticleLab/docs/报告/STEP-055_Android真实WeatherV2风场综合可视化_Codex完成报告_v5.md
OpenAI Codex d9a9c8ed57
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
docs: record STEP-055 zoom-aware particle timing fix
2026-09-05 11:20:53 +08:00

2.1 KiB
Raw Permalink Blame History

STEP-055 Android 真实 WeatherV2 风场综合可视化 Codex 完成报告 v5

Starting HEAD / remote:067bfdc38baa32d6e474a502d67bc0910d18e247,origin/particle/main。

修改

zoom-aware 公式为 effectiveVisualSpeedScale = clamp(1200 * 2^(9 - zoom), 300, 153600)。最终 simulationDeltaSeconds = min(clamp(wallDeltaSeconds, 1/240, 0.050) * effectiveScale, 2400)。典型 60 FPS:z2 为 2400(由 cap 限制)、z5 为 320、z9 为 20 simulation seconds/frame。canonical m/s 和 Web Mercator displacement 公式未改。

State 生命周期重命名为 real-time 语义:base=12 real seconds,hash jitter 后 maxAge=9–15 seconds。State B 在正式路径累加 wallDeltaSeconds,而非 zoom-aware simulation delta;初始 hash stagger、普通 respawn age=0、无 GPU readback 均保持。

普通 pan/zoom/rotate/pitch 先触发一次 ParticleTrail: event=CAMERA_INVALIDATE,Trail accumulation 暂停但 texture 不销毁、State/Field/Timeline 不变;连续变化只更新时间戳。150ms 稳定后 CAMERA_STABLE_RESUME。实际 viewport size 变化才 VIEWPORT_RESIZE 并重分配 Trail texture。

修改文件:

  • src/mbgl/renderer/layers/render_particle_validation_layer.cpp
  • shaders/particle_gpu_validation.fragment.glsl
  • include/mbgl/shaders/gl/particle_gpu_validation.hpp(generator 输出)

未修改 State Float、Trail UByte、previous→current segment、canonical、Timeline、Runtime Window、WeatherColorLayer、REAL WEATHER UI、WeatherV2 assets 或 converter。

验证

  • shader generator:PASS。
  • Linux OpenGL 精确编译 render_particle_validation_layer.cpp:PASS。
  • 既有非 Jest style_layer.test.cpp 精确编译:PASS。
  • git diff --check:PASS。
  • Android Gradle/APK/ADB/设备及 Jest:未执行。

功能提交:f926a3f00730bd298dcff964eb92da2ec7ef3bda(fix: stabilize particle visibility across zoom levels),已成功 push 至 origin/particle/main。本报告随后以独立文档提交记录,不改变功能实现。

最终状态:IMPLEMENTED / WAITING_ANDROID_VALIDATION。