由于您无论如何都不会绘制矩形(但三角形),我建议选择第二个选项。此外,永远不要相信你的程序的用户。
第一个任务是将地图划分为具有相同纹理的多边形。因为你的地形是基于网格的,这可以通过一种洪水填充结合标记算法很容易地实现,例如这样运行:
- n := 0 // will be the polygon numbers
- Iterate over each grid cell
- If cell is marked, continue with next cell
- mark cell with n
- check adjacent cells for the same texture and mark them accordingly *
- n := n + 1
* 此步骤可以通过多种方式执行:FloodFill。此外,您应该为每个块存储一个边缘单元。即具有至少一个具有不同纹理的相邻单元的单元。我们称之为种子细胞。
然后你的网格用多边形编号标记,n 等于多边形计数。
下一步是提取多边形。这就是种子细胞将提供帮助的地方。对于每个块,从种子单元开始,沿着块的边缘运行,收集所有角点。这些角点将构成您的多边形。
之后你有一组多边形。最后一步是对多边形进行三角剖分以进行渲染。这可以通过例如剪耳算法或其他算法来实现。