【BUG经验】地形盖住了编辑器面板
前天 18:361 浏览综合
网格是在地图编辑器的下面一层,但地形(如 草地等)却在地图编辑器的上面一层
交给嗒啦啦:
截图确认了关键信息:
绿色边框正确框住了画布区域(x≈140 起始),说明 layout 坐标正确
地形纹理溢出了绿色边框,延伸到了左侧调色板
网格线被正确裁剪在绿色边框内
这说明外层 nvgScissor 对网格有效但对地形无效。根因找到了:
网格在内层 nvgRestore 之后渲染(使用外层 scissor),而地形在内层 nvgIntersectScissor 之内渲染。内层 nvgIntersectScissor(nvg, 0, 0, mapW*ts, mapH*ts) 是在旋转 transform 下调用的——NanoVG 用 AABB 近似旋转后的矩形做交集,双重 AABB 近似导致最终有效裁剪区域比外层 scissor 更大,从而溢出。
解决方案:移除内层 nvgIntersectScissor(可见范围计算已经限制了渲染的 tile 范围,不需要额外裁剪)。
修复内容总结:
问题根因是 nvgIntersectScissor(nvg, 0, 0, mapW*ts, mapH*ts) 在旋转 transform 下调用。NanoVG 内部用 AABB(轴对齐包围盒)近似旋转后的矩形来做交集——经过"外层 scissor → 旋转空间 AABB → 交集 → 回到屏幕空间 AABB"的双重近似,最终有效裁剪区域比外层 scissor 膨胀了约 √2 倍,导致地形溢出到调色板区域。而网格在 nvgRestore 之后渲染(恢复了未被破坏的外层 scissor),所以一直正常。
移除了内层 nvgIntersectScissor,因为可见范围计算(rowMin/rowMax/colMin/colMax)已经将渲染限制在有效地图区域内,外层 nvgScissor 负责画布边界裁剪,两者配合足够。




