AI改代码,排查问题

所以根本原因:你的 Three.js 相机根本没有被正确同步到地图的视图矩阵。 这不是你或者简单补丁能修复的,需要在源码层面正确获取地图的 viewMatrix

Mapbox GL JS 的 map.transform 对象中的视图矩阵获取方式与 Three.js 期望的不一致,导致相机不同步

模型的世界坐标和 matrixWorld 在突变前后完全没有变化,但模型的屏幕坐标却从 (487.9, 181.9) 跳到了 (508.7, 190.7)
文字屏幕坐标平滑变化,相机投影矩阵也连续变化。
结论:Three.js 相机的 matrixWorldInverse(视图矩阵)与地图的真实相机视图不同步,导致同一世界坐标投影到屏幕时发生跳跃。

这是一个典型的“相机矩阵更新滞后”问题。Mapbox GL JS 在缩放时,map.transform 内部的视图矩阵会变化,但 threeCamera.matrixWorldInverse 没有及时更新(或者更新了但被后续帧覆盖)。文字点使用 map.project 始终是最新的,因此平滑。

  • 视图矩阵在突变时始终是单位矩阵1,0,0,0,0,1...),说明 map.transform.worldToCameraMatrix 没有返回正确的视图矩阵,导致 Three.js 相机与地图相机脱节。
  • 投影矩阵虽然变化,但缺少正确的视图矩阵,模型投影必然错误。
  • 文字点使用 map.project 直接调用 Mapbox 内部相机,不受影响。


意见反馈