gpt4 book ai didi

terrain - 调整六边形网格的高度图生成

转载 作者:行者123 更新时间:2023-12-02 16:46:39 28 4
gpt4 key购买 nike

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

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

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

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

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

enter image description here

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

最后我想说的是:

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

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

  • 一种更好的程序地形生成方法,可以让为了更好地控制此类事情。
  • 一种以不同方式表示顶点信息的方法,可以实现这一点。

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

here )

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

我希望能够实现与我现在所拥有的类似的目标(相对漂亮的起伏山丘和地形),但具有更可控的高原。这使我可以在以后灵活地划分区域(无法播放的图 block ),如果需要,我可以在其中添加更高细节的网格。

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

最佳答案

这取决于您实际想要什么以及您所说的“更多控制”是什么意思。

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

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

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

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

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

Cosine value transform

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

Cosine value transform II

曲线的“锐度”可以通过功率(使效果更加引人注目)或平方根(降低效果)轻松调节。

enter image description here

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

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

祝你的项目顺利

关于terrain - 调整六边形网格的高度图生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006238/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com