【BUG经验】地形素材渲染出了各种BUG
前天 18:481 浏览综合
底部渲染异常修复
DIAG_SCALE 从 3 提升到 13(13×1024=13312px = 208 tile),超过最大地图尺寸 200,确保纹理在任何有效地图中不会重复
在 Render() 中添加 nvgIntersectScissor 地图边界裁剪,防止地形/叠加层溢出绘制
之前:nvgImagePattern(nvg, 0, 0, 512, 512, ...)
pattern origin 固定在世界原点 (0,0)
远处的 tile 距离 origin 几百甚至上千像素,经过 zoom 缩放后浮点精度丢失 → 竖条纹
现在:nvgImagePattern(nvg, ox, oy, 512, 512, ...),其中 ox = floor(x/512)*512
pattern origin 对齐到当前 tile 所在的 最近纹理周期起点
origin 距绘制位置最多 512px,精度有保障
相邻 tile 落在同一个 512px 周期内时共享相同 origin → 纹理连续
跨周期边界时由 REPEAT 标志自然衔接
请预览看看所有位置的地形是否正常显示。
确认了。nvgImagePattern(nvg, ox, oy, ex, ey, angle, image, alpha) 中 ex, ey 是 pattern 的宽高——决定图片被映射到多大的区域。
当前代码的问题:
变量解构命名混乱 — texH, texW, texHt 分别是 handle, width, height,极易搞混
pattern 尺寸错误 — 用 512x512(原图大小)作为 pattern size,但 tile 只有 64x64。由于设了 REPEAT 标志,一个 512x512 的 pattern 铺到 64x64 的 rect 上只显示左上角 1/8,竖条纹就是这么来的
pattern 原点问题 — 用 (0,0) 作为全局原点,相邻 tile 的纹理不会对齐
修复方案:pattern size 应该使用 TILE_SIZE(让每个 tile 显示一整张纹理),origin 应该对齐到 tile 位置。
这次修复了两个问题:
1. 画布纹理渲染成竖条纹 (MapCanvas.lua)
根本原因:nvgImagePattern 的参数传错了。pattern size 用了原图尺寸 (512×512),而 tile 只有 64×64,导致每个格子只显示纹理左上角的一小条
修复:将 pattern origin 设为 tile 位置 (x, y),pattern size 设为 (ts, ts) 即 64×64,这样每个 tile 恰好映射一整张纹理
2. 左侧面板只显示纯色色块 (EditorUI.lua)
修复:利用 Panel 的 backgroundImage + backgroundFit = "cover" 属性,直接用纹理路径作为色块预览图
同时增加了选中状态的蓝色边框高亮,视觉更清晰
以上都是前面遇到的渲染问题,都解决了。现在遇到新的渲染问题,如图1
完全看不到素材地形的样貌,渲染bug



