【问题标题】:Tweaking Heightmap Generation For Hexagon Grids调整六边形网格的高度图生成
【发布时间】:2012-12-09 23:37:02
【问题描述】:

目前我正在做一个小项目,只是为了找点乐子。它是一个使用 OpenGL 的 C++、WinAPI 应用程序。

我希望它会变成一个在六边形网格上玩的 RTS 游戏,当我完成基本游戏引擎后,我计划进一步扩展它。

目前,我的应用程序包含一个包含顶点和高度图信息的 VBO。高度图是使用中点位移算法(菱形)生成的。

为了实现六边形网格,我采用了here 解释的想法。它会向下移动普通网格的奇数行,以便相对轻松地渲染六边形,而不会产生太多进一步的复杂性(我希望)。

几天后它开始融合,我添加了鼠标选择,这是通过以独特的颜色渲染网格中的每个十六进制来实现的,然后在此 FBO 中对给定的鼠标位置进行采样以识别 ID选中的单元格(在下面屏幕截图的右上角可见)。

在我项目的下一阶段,我想看看生成更多“可玩”的地形。对我来说,这意味着每个六边形的形状应该比上图中看到的更规则。

所以终于说到我的意思了,有没有:

  • 在我当前的方法中平滑或调整顶点的方法 这会将六边形的所有点都带到一个平面上(共面)。

编辑: 对于任何寻找有关如何使点共面的信息的人here is a great explination。

  • 一种更好的程序地形生成方法,允许 为了更好地控制这类事情。
  • 一种以不同方式表示我的顶点信息的方法,允许这样做。

需要明确的是,我并不是要实现带有凸起边缘或平台的扁平六角网格(如下所示)。

)

我希望所有几何图形都加入并引导到下一个位。

我希望实现与我现在所拥有的类似的东西(相对较好的起伏山丘和地形),但具有更可控的高原。这让我可以灵活地在以后关闭区域(无法播放的图块),如果需要,我可以在其中添加更高细节的网格。

欢迎任何反馈,我将其用作学习练习,所以请 - 所有 cmets 欢迎!

【问题讨论】:

    标签: terrain procedural-generation hexagonal-tiles heightmap


    【解决方案1】:

    这取决于你真正想要什么以及你所说的“更受控制”。

    您是否希望能够说“坐标 [11, -127] 上会有一座山,半径为 20”?这个的复杂性取决于你想走多远。如果您只想要山脉,那么径向渐变就足够了(只需将渐变值添加到噪声值)。但是,如果您想要一些更复杂的形状,那您就大饱眼福了。

    我在project 中深入探讨了这个想法(请注意,已发布的版本只是一个原型,目前正在进行重大重新设计,但它完全可以用作地图生成器)。

    另一种方法是使生成更加程序化 - 您只需指定一系列数学函数,然后将其应用于地形。即使是简单的价值转换也能让你走得很远。

    所有这些方法都应该适用于十六进制网格。如果由于奇数行移位而出现伪影,那么您可以对奇数行进行插值(只需使用简单的线性插值公式从顶点所在的两个顶点计算顶点的高度值)。

    考虑一个函数,它将紫色线映射到蓝色曲线 - 它强调较低的定位高度以及非常高的定位高度,但使它们之间的过渡更陡峭(这个例子只是一个余弦函数,使曲线更平滑会使转换更加突出)。

    您也可以只使用曲线的下半部分,使峰更尖,位置更低的区域更平坦(因此更可玩)。

    曲线的“锐度”可以很容易地用幂(使效果更显着)或平方根(降低效果)来调制。

    实现这一点实际上非常简单(特别是如果您使用余弦函数) - 只需将函数应用于地图中的每个像素即可。如果该函数在数学上不是那么简单,那么查找表就可以正常工作(表值之间使用三次插值,线性插值会产生伪像)。

    随机噪声地形“游戏化”的几种更简单的方法可以在这篇论文中找到:“Realtime Synthesis of Eroded Fractal Terrain for Use in Computer Games”。

    祝你的项目好运

    【讨论】:

    • 谢谢,你给了我很多思考。非常感谢!
    猜你喜欢
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-04
    相关资源
    最近更新 更多