4-6 平整地图单元表面

  在上一章中,我们对采样范围进行了缩放。通过调整一个参数,控制彩色噪点图对地图的覆盖范围,解决了当一个地图单元高度变化的时候,它的矩形阶梯状连接区域顶点更加平滑,不会出现一些看起来很奇怪的三角面片了。不过我们仔细观察整个地图的时候,发现每个地图单元的六边形部分并不平整,这种效果并不是我们想要的。这一章我们将修复这个问题。

  要让每个地图单元的六边形部分变得平坦其实很简单,只要我们在HexMesh.Perturb方法中,对Y轴的坐标不进行扰动即可,代码如下:

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
private Vector3 Perturb(Vector3 position)
{


position.x += (sample.x * 2f - 1f) * HexMetrics.cellPerturbStrength;
//为了让cell表面变得平坦,这里不再在垂直方向上进行扰动。
//position.y += (sample.y * 2f - 1f) * HexMetrics.cellPerturbStrength;
position.z += (sample.z * 2f - 1f) * HexMetrics.cellPerturbStrength;

return position;
}

  现在,所有地图单元与阶梯每一层的顶点在Y轴方向上都不会发生扰动了。但是要注意一点,现在地图中所有顶点的最大扰动距离都减小到了 $\sqrt {50} \approx 7.07$ ,并且只在XZ平面扰动了。不过这样的改动并没有什么不妥当的地方,反而实现了在扰动的同时不影响对每个地图单元坐标的识别。
  现在我们就完成了平整每个地图单元表面的工作。但是经过观察我们发现,在Slope-Cliff连接类型的地图单元之间,有些三角形连接区域出现了破面的问题,而且取消了地图上所有顶点在Y轴的扰动也并不是一个好办法。这些问题我们在之后的章节来解决。

Github代码